--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
nomadnet/ui/textui/Channels.py 1fb7ed5b8d1f9f813f8b3126e8484d0d191054b9 (1fb7ed5b) Text, 79.12 KB
Tff7b72import T7ee787collections
Tff7b72import T7ee787os
Tff7b72import T7ee787re
Tff7b72import T7ee787time
Tff7b72import T7ee787RNS
Tff7b72import T7ee787urwid
Tff7b72import T7ee787nomadnet
Tff7b72from T7ee787nomadnetT7ee787.T7ee787RRC Tff7b72import Te6edf3RRCHub
Tff7b72from T7ee787nomadnetT7ee787.T7ee787vendorT7ee787.T7ee787additional_urwid_widgets Tff7b72import Te6edf3IndicativeListBox
Tff7b72from T7ee787nomadnetT7ee787.T7ee787uiT7ee787.T7ee787textuiT7ee787.T7ee787MicronParser Tff7b72import Te6edf3LinkableTextTb4b4b4, Te6edf3LinkSpec
Tff7b72from T7ee787RNST7ee787.T7ee787UtilitiesT7ee787.T7ee787rngitT7ee787.T7ee787util Tff7b72import Te6edf3MarkdownToMicron
Tff7b72from T7ee787RNST7ee787.T7ee787UtilitiesT7ee787.T7ee787rngitT7ee787.T7ee787highlight Tff7b72import Te6edf3SyntaxHighlighter
Tff7b72from T7ee787.T7ee787MicronParser Tff7b72import Te6edf3markup_to_attrmaps
Tff7b72from T7ee787nomadnetT7ee787.T7ee787util Tff7b72import Te6edf3sanitize_nameTb4b4b4, Te6edf3strip_modifiersTb4b4b4, Te6edf3strip_micron
Tff7b72from T7ee787nomadnetT7ee787.T7ee787util Tff7b72import Te6edf3strip_escaped_micronTb4b4b4, Te6edf3unescape_micronTb4b4b4, Te6edf3strip_non_formatting_tags
Tff7b72from T7ee787nomadnetT7ee787.T7ee787vendorT7ee787.T7ee787Scrollable Tff7b72import Te6edf3ScrollableTb4b4b4, Te6edf3ScrollBar
Te6edf3theme_dark Tff7b72= Tb4b4b4{ Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdddTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftsTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff888Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnick_selfTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff6c5Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnick_peerTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff3cdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnoticeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fffd3Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fff55Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffsystemTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff888Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffmentionTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fffb4Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff79dTa5d6ff"Tb4b4b4,
T8b949e# colorgen.py --hue-step 18 --sat-start 25 --sat-steps 2 --sat-step 100 --light-step 30 --normalize --normalize-target 2.5 --perceptual-multiplier 1.4 --discard 1,5,7,11,13,14,17,27,31,33,37,39,3,16,18,36
Ta5d6ff"Ta5d6ffnick_colorsTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6fff68787Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff00c394Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffd59e00Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff62be00Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffa1ac76Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff95b600Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff76a9eeTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff81b385Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff7eb1a1Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffe89264Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff7cb0b0Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff00c0c0Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff8cacbbTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff32b4dbTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff98a8c3Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbbab00Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff95a0fdTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffa9a2caTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffad98feTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffc58ffaTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdf83f4Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffc49abfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fff380c7Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fff484a7Ta5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4}
Te6edf3theme_light Tff7b72= Tb4b4b4{ Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff111Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftsTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff888Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnick_selfTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff3a0Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnick_peerTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff077Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnoticeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffa70Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffa22Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffsystemTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff888Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffmentionTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffc50Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff79dTa5d6ff"Tb4b4b4,
T8b949e# colorgen.py --hue-step 18 --sat-start 25 --sat-steps 2 --sat-step 100 --light-step 30 --normalize --normalize-target 2.5 --perceptual-multiplier 0.2 --discard 1,5,7,11,13,14,17,27,31,33,37,39,3,16,18,36 > ~/.nomadnetwork/storage/pages/index.mu
Ta5d6ff"Ta5d6ffnick_colorsTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffca0000Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff008000Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff9d1c00Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff007800Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff2c5200Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff006800Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff004ac0Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff006100Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff005d2cTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffb70000Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff005b5bTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff007b7aTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff005071Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff0064a5Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff004580Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff714f00Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff0026d3Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff48318cTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff5200d5Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff8400cfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffaa00c8Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff820079Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffc60086Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffc80043Ta5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4}
Tff7b72class T56d364_ChatLinkableTextTb4b4b4(Te6edf3LinkableTextTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffrenderTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3focusTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3c Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTff7b72.Td2a8ffrenderTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3focusTb4b4b4)
Tff7b72if Te6edf3focusTb4b4b4:
Te6edf3c Tff7b72= Te6edf3urwidTff7b72.Td2a8ffCompositeCanvasTb4b4b4(Te6edf3cTb4b4b4)
Te6edf3cTff7b72.Td2a8ffcursor Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_cursor_coordsTb4b4b4(Te6edf3sizeTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdelegate Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpeek_linkTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3c
Te6edf3_LINK_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(
Ta5d6ffrTa5d6ff"Ta5d6ff(?P<lxmf>(?<!Ta5d6ff\Ta5d6ffw)lxmf@[0-9a-fA-F]Tffd700{32}Ta5d6ff)(?!Ta5d6ff\Ta5d6ffw)Ta5d6ff"
Ta5d6ffrTa5d6ff"Ta5d6ff|(?P<page>(?<![@Ta5d6ff\Ta5d6ffw])[0-9a-fA-F]Tffd700{32}Ta5d6ff(?::Ta5d6ff\Ta5d6ffS+)?)(?!Ta5d6ff\Ta5d6ffw)Ta5d6ff"
Ta5d6ffrTa5d6ff"Ta5d6ff|(?P<room>(?<!Ta5d6ff\Ta5d6ffw)#[A-Za-z0-9][A-Za-z0-9_Ta5d6ff\Ta5d6ff-]Ta5d6ff{Ta5d6ff0,62})Ta5d6ff"
Tb4b4b4)
Tff7b72def Td2a8ff_link_attrsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffroomTa5d6ff"Tb4b4b4: Te6edf3urwidTff7b72.Td2a8ffAttrSpecTb4b4b4(Ta5d6ff"Ta5d6fflight cyan,underlineTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4, Te6edf3colorsTff7b72=T79c0ff256Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4: Te6edf3urwidTff7b72.Td2a8ffAttrSpecTb4b4b4(Ta5d6ff"Ta5d6fflight magenta,underlineTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4, Te6edf3colorsTff7b72=T79c0ff256Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffpageTa5d6ff"Tb4b4b4: Te6edf3urwidTff7b72.Td2a8ffAttrSpecTb4b4b4(Ta5d6ff"Ta5d6fflight blue,underlineTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4, Te6edf3colorsTff7b72=T79c0ff256Tb4b4b4)Tb4b4b4,
Tb4b4b4}
Te6edf3_LINK_ATTRS Tff7b72= Te6edf3_link_attrsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_scan_linksTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3m Tff7b72in Te6edf3_LINK_RETff7b72.Td2a8fffinditerTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3mTff7b72.Td2a8ffgroupTb4b4b4(Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72yield Te6edf3mTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3mTff7b72.Td2a8ffendTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4, Te6edf3mTff7b72.Td2a8ffgroupTb4b4b4(Tb4b4b4)Tb4b4b4[T79c0ff5Tb4b4b4:Tb4b4b4]
Tff7b72elif Te6edf3mTff7b72.Td2a8ffgroupTb4b4b4(Ta5d6ff"Ta5d6ffpageTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72yield Te6edf3mTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3mTff7b72.Td2a8ffendTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffpageTa5d6ff"Tb4b4b4, Te6edf3mTff7b72.Td2a8ffgroupTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3mTff7b72.Td2a8ffgroupTb4b4b4(Ta5d6ff"Ta5d6ffroomTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72yield Te6edf3mTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3mTff7b72.Td2a8ffendTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffroomTa5d6ff"Tb4b4b4, Te6edf3mTff7b72.Td2a8ffgroupTb4b4b4(Tb4b4b4)Tb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4]
Tff7b72def Td2a8ff_chunk_by_bytesTb4b4b4(Te6edf3sTb4b4b4, Te6edf3budgetTb4b4b4)Tb4b4b4:
Te6edf3chunks Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3remaining Tff7b72= Te6edf3s
Tff7b72while Te6edf3remainingTb4b4b4:
Te6edf3encoded Tff7b72= Te6edf3remainingTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3encodedTb4b4b4) Tff7b72<Tff7b72= Te6edf3budgetTb4b4b4:
Te6edf3chunksTff7b72.Td2a8ffappendTb4b4b4(Te6edf3remainingTb4b4b4)
Tff7b72break
Te6edf3cut Tff7b72= Te6edf3encodedTb4b4b4[Tb4b4b4:Te6edf3budgetTb4b4b4]
Tff7b72while Te6edf3cut Tff7b72and Tb4b4b4(Te6edf3cutTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4] Tff7b72& T79c0ff0xC0Tb4b4b4) Tff7b72== T79c0ff0x80Tb4b4b4:
Te6edf3cut Tff7b72= Te6edf3cutTb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]
Te6edf3chunk Tff7b72= Te6edf3cutTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffignoreTa5d6ff"Tb4b4b4)
Te6edf3last_space Tff7b72= Tffa657maxTb4b4b4(Te6edf3chunkTff7b72.Td2a8ffrfindTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3chunkTff7b72.Td2a8ffrfindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3chunkTff7b72.Td2a8ffrfindTb4b4b4(Ta5d6ff"Tffea00\tTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3last_space Tff7b72> T79c0ff0 Tff7b72and Te6edf3last_space Tff7b72>Tff7b72= Tffa657lenTb4b4b4(Te6edf3chunkTb4b4b4) Tff7b72/Tff7b72/ T79c0ff2Tb4b4b4:
Te6edf3chunk Tff7b72= Te6edf3chunkTb4b4b4[Tb4b4b4:Te6edf3last_spaceTb4b4b4]
Tff7b72if Tff7b72not Te6edf3chunkTb4b4b4:
Te6edf3chunk Tff7b72= Te6edf3remainingTb4b4b4[Tb4b4b4:T79c0ff1Tb4b4b4]
Te6edf3chunksTff7b72.Td2a8ffappendTb4b4b4(Te6edf3chunkTff7b72.Td2a8ffrstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3remaining Tff7b72= Te6edf3remainingTb4b4b4[Tffa657lenTb4b4b4(Te6edf3chunkTb4b4b4)Tb4b4b4:Tb4b4b4]Tff7b72.Td2a8fflstripTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3chunks
Tff7b72def Td2a8ff_split_messageTb4b4b4(Te6edf3textTb4b4b4, Te6edf3max_bytesTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3textTb4b4b4:
Tff7b72return Tb4b4b4[Te6edf3textTb4b4b4]
Te6edf3parts Tff7b72= Tb4b4b4[Te6edf3textTb4b4b4]
Tff7b72for Te6edf3_attempt Tff7b72in Tffa657rangeTb4b4b4(T79c0ff10Tb4b4b4)Tb4b4b4:
Te6edf3K_guess Tff7b72= Tffa657maxTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3partsTb4b4b4)Tb4b4b4)
Te6edf3prefix_bytes Tff7b72= Tffa657lenTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6ff(Tffd700{}Ta5d6ff/Tffd700{}Ta5d6ff) Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3K_guessTb4b4b4, Te6edf3K_guessTb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3budget Tff7b72= Te6edf3max_bytes Tff7b72- Te6edf3prefix_bytes
Tff7b72if Te6edf3budget Tff7b72<Tff7b72= T79c0ff0Tb4b4b4:
Tff7b72return Tff7b72None
Te6edf3parts Tff7b72= Te6edf3_chunk_by_bytesTb4b4b4(Te6edf3textTb4b4b4, Te6edf3budgetTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3partsTb4b4b4) Tff7b72== Te6edf3K_guessTb4b4b4:
Tff7b72break
Te6edf3K Tff7b72= Tffa657lenTb4b4b4(Te6edf3partsTb4b4b4)
Tff7b72return Tb4b4b4[Ta5d6ff"Ta5d6ff(Tffd700{}Ta5d6ff/Tffd700{}Ta5d6ff) Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3iTff7b72+T79c0ff1Tb4b4b4, Te6edf3KTb4b4b4) Tff7b72+ Te6edf3p Tff7b72for Te6edf3iTb4b4b4, Te6edf3p Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3partsTb4b4b4)Tb4b4b4]
Tff7b72def Td2a8ff_scan_mentionsTb4b4b4(Te6edf3textTb4b4b4, Te6edf3own_nickTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3own_nick Tff7b72or Tff7b72not Te6edf3textTb4b4b4:
Tff7b72return
Te6edf3pat Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff(?<![A-Za-z0-9_])@Ta5d6ff"Tff7b72+Te6edf3reTff7b72.Td2a8ffescapeTb4b4b4(Te6edf3own_nickTb4b4b4)Tff7b72+Ta5d6ffrTa5d6ff"Ta5d6ff(?![A-Za-z0-9_])Ta5d6ff"Tb4b4b4, Te6edf3reTff7b72.Td2a8ffIGNORECASETb4b4b4) T8b949e# @(....)
Tff7b72for Te6edf3m Tff7b72in Te6edf3patTff7b72.Td2a8fffinditerTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72yield Te6edf3mTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3mTff7b72.Td2a8ffendTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffmentionTa5d6ff"Tb4b4b4, Tff7b72None
Tff7b72def Td2a8ff_body_markupTb4b4b4(Te6edf3bodyTb4b4b4, Te6edf3body_attrTff7b72=Ta5d6ff"Ta5d6ffbody_textTa5d6ff"Tb4b4b4, Te6edf3own_nickTff7b72=Tff7b72NoneTb4b4b4, Te6edf3check_linksTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Te6edf3spans Tff7b72= Tffa657listTb4b4b4(Te6edf3_scan_linksTb4b4b4(Te6edf3bodyTb4b4b4)Tb4b4b4)
Te6edf3spansTff7b72.Td2a8ffextendTb4b4b4(Te6edf3_scan_mentionsTb4b4b4(Te6edf3bodyTb4b4b4, Te6edf3own_nickTb4b4b4)Tb4b4b4)
Te6edf3spansTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3sTb4b4b4: Te6edf3sTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Te6edf3filtered Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3last_end Tff7b72= T79c0ff0
Tff7b72for Te6edf3s Tff7b72in Te6edf3spansTb4b4b4:
Tff7b72if Te6edf3sTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72>Tff7b72= Te6edf3last_endTb4b4b4:
Te6edf3filteredTff7b72.Td2a8ffappendTb4b4b4(Te6edf3sTb4b4b4)
Te6edf3last_end Tff7b72= Te6edf3sTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3spans Tff7b72= Te6edf3filtered
Tff7b72if Tff7b72not Te6edf3spansTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4(Te6edf3body_attrTb4b4b4, Te6edf3bodyTb4b4b4)Tb4b4b4]Tb4b4b4, Tff7b72False
Te6edf3out Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3pos Tff7b72= T79c0ff0
Te6edf3has_links Tff7b72= Tff7b72False
Tff7b72for Te6edf3startTb4b4b4, Te6edf3endTb4b4b4, Te6edf3kindTb4b4b4, Te6edf3target Tff7b72in Te6edf3spansTb4b4b4:
Tff7b72if Te6edf3start Tff7b72> Te6edf3posTb4b4b4:
Te6edf3outTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3body_attrTb4b4b4, Te6edf3bodyTb4b4b4[Te6edf3posTb4b4b4:Te6edf3startTb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3kind Tff7b72== Ta5d6ff"Ta5d6ffmentionTa5d6ff"Tb4b4b4:
Te6edf3outTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6ffirc_mentionTa5d6ff"Tb4b4b4, Te6edf3bodyTb4b4b4[Te6edf3startTb4b4b4:Te6edf3endTb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3base Tff7b72= Te6edf3_LINK_ATTRSTb4b4b4[Te6edf3kindTb4b4b4]
Tff7b72if Te6edf3check_linksTb4b4b4:
Te6edf3outTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3LinkSpecTb4b4b4(Te6edf3kindTff7b72+Ta5d6ff"Ta5d6ff:Ta5d6ff"Tff7b72+Te6edf3targetTb4b4b4, Te6edf3baseTb4b4b4, Te6edf3cmTff7b72=T79c0ff256Tb4b4b4)Tb4b4b4, Te6edf3bodyTb4b4b4[Te6edf3startTb4b4b4:Te6edf3endTb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3has_links Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3outTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fflink_Tffd700{Te6edf3kindTffd700}Ta5d6ff"Tb4b4b4, Te6edf3bodyTb4b4b4[Te6edf3startTb4b4b4:Te6edf3endTb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3has_links Tff7b72= Tff7b72True
Te6edf3pos Tff7b72= Te6edf3end
Tff7b72if Te6edf3pos Tff7b72< Tffa657lenTb4b4b4(Te6edf3bodyTb4b4b4)Tb4b4b4:
Te6edf3outTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3body_attrTb4b4b4, Te6edf3bodyTb4b4b4[Te6edf3posTb4b4b4:Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3outTb4b4b4, Te6edf3has_links
Tff7b72def Td2a8ff_short_hashTb4b4b4(Te6edf3bTb4b4b4, Te6edf3nTff7b72=T79c0ff12Tb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3bTb4b4b4, Tb4b4b4(Tffa657bytesTb4b4b4, Tffa657bytearrayTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72return Tffa657bytesTb4b4b4(Te6edf3bTb4b4b4)Tff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4[Tb4b4b4:Te6edf3nTb4b4b4]
Tff7b72return Ta5d6ff"Ta5d6ff?Ta5d6ff"
Tff7b72def Td2a8ff_format_tsTb4b4b4(Te6edf3ts_msTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Te6edf3timeTff7b72.Td2a8ffstrftimeTb4b4b4(Ta5d6ff"Ta5d6ff%Ta5d6ffH:Ta5d6ff%Ta5d6ffM:Ta5d6ff%Ta5d6ffSTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fflocaltimeTb4b4b4(Te6edf3ts_msTff7b72/T79c0ff1000.0Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72class T56d364ChannelsListShortcutsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffwidget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff[C-n] New Hub [C-a] Add Room [C-r] Connect [C-w] Disconnect [C-t] Auto-reconnect [C-e] Edit Hub [C-x] Remove [C-y] Toggle ChannelsTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffshortcutbarTa5d6ff"Tb4b4b4)
Tff7b72class T56d364ChannelsRoomShortcutsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffwidget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff[C-d] Send [C-l] Leave [C-k] Clear [C-u] Users [C-y] Channels [F8] Collapse Joins [Tab] FocusTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffshortcutbarTa5d6ff"Tb4b4b4)
Tff7b72class T56d364ChannelsDialogLineBoxTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffescTa5d6ff"Tb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdelegateTb4b4b4, Ta5d6ff"Ta5d6ffclose_dialogTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3ChannelsDialogLineBoxTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72class T56d364ChannelListEntryTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4)Tb4b4b4:
Te6edf3_selectable Tff7b72= Tff7b72True
Te6edf3signals Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffclickTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_command_mapTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72!= Te6edf3urwidTff7b72.Td2a8ffACTIVATETb4b4b4:
Tff7b72return Te6edf3key
Tff7b72selfTff7b72.Td2a8ff_emitTb4b4b4(Ta5d6ff"Ta5d6ffclickTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffmouse_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3eventTb4b4b4, Te6edf3buttonTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3focusTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3button Tff7b72!= T79c0ff1 Tff7b72or Tff7b72not Te6edf3urwidTff7b72.Td2a8ffutilTff7b72.Td2a8ffis_mouse_pressTb4b4b4(Te6edf3eventTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72selfTff7b72.Td2a8ff_emitTb4b4b4(Ta5d6ff"Ta5d6ffclickTa5d6ff"Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72class T56d364ChannelsExpandGutterTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4, Te6edf3delegateTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffdelegate Tff7b72= Te6edf3delegate
Te6edf3glyph Tff7b72= Te6edf3appTff7b72.Td2a8ffuiTff7b72.Td2a8ffglyphsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffarrow_rTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff>Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3glyphTb4b4b4) Tff7b72> T79c0ff1Tb4b4b4:
Te6edf3glyph Tff7b72= Ta5d6ff"Ta5d6ff>Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ff_inner Tff7b72= Te6edf3urwidTff7b72.Td2a8ffSolidFillTb4b4b4(Te6edf3glyphTb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_innerTb4b4b4, Ta5d6ff"Ta5d6ffshortcutbarTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflist_focusTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffmouse_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3eventTb4b4b4, Te6edf3buttonTb4b4b4, Te6edf3colTb4b4b4, Te6edf3rowTb4b4b4, Te6edf3focusTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3button Tff7b72== T79c0ff1 Tff7b72and Te6edf3urwidTff7b72.Td2a8ffutilTff7b72.Td2a8ffis_mouse_pressTb4b4b4(Te6edf3eventTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_channel_listTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffselectableTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72class T56d364UsersExpandGutterTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4, Te6edf3delegateTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffdelegate Tff7b72= Te6edf3delegate
Te6edf3glyph Tff7b72= Te6edf3appTff7b72.Td2a8ffuiTff7b72.Td2a8ffglyphsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffarrow_lTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff<Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3glyphTb4b4b4) Tff7b72> T79c0ff1Tb4b4b4:
Te6edf3glyph Tff7b72= Ta5d6ff"Ta5d6ff<Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ff_inner Tff7b72= Te6edf3urwidTff7b72.Td2a8ffSolidFillTb4b4b4(Te6edf3glyphTb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_innerTb4b4b4, Ta5d6ff"Ta5d6ffshortcutbarTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflist_focusTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffmouse_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3eventTb4b4b4, Te6edf3buttonTb4b4b4, Te6edf3colTb4b4b4, Te6edf3rowTb4b4b4, Te6edf3focusTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3button Tff7b72== T79c0ff1 Tff7b72and Te6edf3urwidTff7b72.Td2a8ffutilTff7b72.Td2a8ffis_mouse_pressTb4b4b4(Te6edf3eventTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_usersTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffselectableTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72class T56d364UsersBoxTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffmouse_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3eventTb4b4b4, Te6edf3buttonTb4b4b4, Te6edf3colTb4b4b4, Te6edf3rowTb4b4b4, Te6edf3focusTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3button Tff7b72== T79c0ff1 Tff7b72and Te6edf3urwidTff7b72.Td2a8ffutilTff7b72.Td2a8ffis_mouse_pressTb4b4b4(Te6edf3eventTb4b4b4) Tff7b72and Te6edf3row Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_usersTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffmouse_eventTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3eventTb4b4b4, Te6edf3buttonTb4b4b4, Te6edf3colTb4b4b4, Te6edf3rowTb4b4b4, Te6edf3focusTb4b4b4)
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6fftabTa5d6ff"Tb4b4b4:
Te6edf3rw Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffdelegateTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3rw Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3rwTff7b72.Td2a8ffcolumnsTff7b72.Td2a8fffocus_position Tff7b72= T79c0ff0
Te6edf3rwTff7b72.Td2a8ffframeTff7b72.Td2a8fffocus_position Tff7b72= Ta5d6ff"Ta5d6fffooterTa5d6ff"
Tff7b72return Tff7b72None
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl uTa5d6ff"Tb4b4b4:
Te6edf3rw Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffdelegateTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3rw Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3rwTff7b72.Td2a8fftoggle_usersTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl yTa5d6ff"Tb4b4b4:
Te6edf3rw Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffdelegateTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3rw Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3rwTff7b72.Td2a8ffdisplayTff7b72.Td2a8fftoggle_channel_listTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72class T56d364ChannelsListAreaTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffmouse_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3eventTb4b4b4, Te6edf3buttonTb4b4b4, Te6edf3colTb4b4b4, Te6edf3rowTb4b4b4, Te6edf3focusTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3button Tff7b72== T79c0ff1 Tff7b72and Te6edf3urwidTff7b72.Td2a8ffutilTff7b72.Td2a8ffis_mouse_pressTb4b4b4(Te6edf3eventTb4b4b4) Tff7b72and Te6edf3row Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_channel_listTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffmouse_eventTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3eventTb4b4b4, Te6edf3buttonTb4b4b4, Te6edf3colTb4b4b4, Te6edf3rowTb4b4b4, Te6edf3focusTb4b4b4)
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl nTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffnew_hub_dialogTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl aTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffjoin_room_dialogTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl rTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffconnect_selectedTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl wTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffdisconnect_selectedTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl tTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_auto_reconnect_selectedTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl eTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffedit_hub_dialogTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl xTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffremove_selected_dialogTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl yTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_channel_listTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6fff8Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_join_part_collapseTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6fftabTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffframeTff7b72.Td2a8fffocus_position Tff7b72= Ta5d6ff"Ta5d6ffheaderTa5d6ff"
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffupTa5d6ff" Tff7b72and Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffilbTff7b72.Td2a8fffirst_item_is_selectedTb4b4b4(Tb4b4b4) Tff7b72or Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffilbTff7b72.Td2a8ffbody_is_emptyTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffframeTff7b72.Td2a8fffocus_position Tff7b72= Ta5d6ff"Ta5d6ffheaderTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3ChannelsListAreaTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72class T56d364HubInfoAreaTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl nTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffnew_hub_dialogTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl aTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffjoin_room_dialogTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl rTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffconnect_selectedTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl wTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffdisconnect_selectedTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl tTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_auto_reconnect_selectedTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl eTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffedit_hub_dialogTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl xTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffremove_selected_dialogTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl yTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_channel_listTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6fff8Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_join_part_collapseTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72return Tffa657superTb4b4b4(Te6edf3HubInfoAreaTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72class T56d364RoomMessageEditTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_tab_state Tff7b72= Tff7b72None
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6fftabTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_try_tab_completeTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Te6edf3key
Tff7b72selfTff7b72.Td2a8ff_tab_state Tff7b72= Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl dTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffsend_messageTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl kTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_edit_textTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl lTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffleave_roomTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl uTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_usersTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl yTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffdisplayTff7b72.Td2a8fftoggle_channel_listTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6fff8Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffdisplayTff7b72.Td2a8fftoggle_join_part_collapseTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffupTa5d6ff"Tb4b4b4:
Te6edf3y Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_cursor_coordsTb4b4b4(Te6edf3sizeTb4b4b4)Tb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3y Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffframeTff7b72.Td2a8fffocus_position Tff7b72= Ta5d6ff"Ta5d6ffbodyTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3RoomMessageEditTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3RoomMessageEditTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72def Td2a8ff_candidatesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3prefix_lowerTb4b4b4)Tb4b4b4:
Te6edf3delegate Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffdelegateTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3delegate Tff7b72is Tff7b72None Tff7b72or Te6edf3delegateTff7b72.Td2a8ffhub Tff7b72is Tff7b72None Tff7b72or Te6edf3delegateTff7b72.Td2a8ffroom Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Te6edf3members Tff7b72= Te6edf3delegateTff7b72.Td2a8ffhubTff7b72.Td2a8ffget_membersTb4b4b4(Te6edf3delegateTff7b72.Td2a8ffroomTb4b4b4)
Te6edf3own_hash Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3delegateTff7b72.Td2a8ffappTff7b72.Td2a8ffidentity Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3own_hash Tff7b72= Te6edf3delegateTff7b72.Td2a8ffappTff7b72.Td2a8ffidentityTff7b72.Td2a8ffhash
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Te6edf3names Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3m Tff7b72in Te6edf3membersTb4b4b4:
Tff7b72if Te6edf3own_hash Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3m Tff7b72== Te6edf3own_hashTb4b4b4:
Tff7b72continue
Te6edf3namesTff7b72.Td2a8ffaddTb4b4b4(Te6edf3delegateTff7b72.Td2a8ffhubTff7b72.Td2a8ffdisplay_name_forTb4b4b4(Te6edf3mTb4b4b4)Tb4b4b4)
Tff7b72return Tffa657sortedTb4b4b4(Tb4b4b4[Te6edf3n Tff7b72for Te6edf3n Tff7b72in Te6edf3names Tff7b72if Te6edf3nTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3prefix_lowerTb4b4b4)Tb4b4b4]Tb4b4b4,
Te6edf3keyTff7b72=Tffa657strTff7b72.Td2a8fflowerTb4b4b4)
Tff7b72def Td2a8ff_try_tab_completeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3text Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_edit_textTb4b4b4(Tb4b4b4)
Te6edf3pos Tff7b72= Tff7b72selfTff7b72.Td2a8ffedit_pos
Te6edf3state Tff7b72= Tff7b72selfTff7b72.Td2a8ff_tab_state
Tff7b72if Te6edf3state Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3stateTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcursor_afterTa5d6ff"Tb4b4b4) Tff7b72== Te6edf3posTb4b4b4:
Te6edf3prefix_lower Tff7b72= Te6edf3stateTb4b4b4[Ta5d6ff"Ta5d6ffprefixTa5d6ff"Tb4b4b4]
Te6edf3token_start Tff7b72= Te6edf3stateTb4b4b4[Ta5d6ff"Ta5d6fftoken_startTa5d6ff"Tb4b4b4]
Te6edf3has_at Tff7b72= Te6edf3stateTb4b4b4[Ta5d6ff"Ta5d6ffhas_atTa5d6ff"Tb4b4b4]
Te6edf3matches Tff7b72= Tff7b72selfTff7b72.Td2a8ff_candidatesTb4b4b4(Te6edf3prefix_lowerTb4b4b4)
Tff7b72if Tff7b72not Te6edf3matchesTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_tab_state Tff7b72= Tff7b72None
Tff7b72return Tff7b72False
Te6edf3idx Tff7b72= Tb4b4b4(Te6edf3stateTb4b4b4[Ta5d6ff"Ta5d6ffidxTa5d6ff"Tb4b4b4] Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72% Tffa657lenTb4b4b4(Te6edf3matchesTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3start Tff7b72= Te6edf3pos
Tff7b72while Te6edf3start Tff7b72> T79c0ff0 Tff7b72and Tb4b4b4(Te6edf3textTb4b4b4[Te6edf3startTff7b72-T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffisalnumTb4b4b4(Tb4b4b4) Tff7b72or Te6edf3textTb4b4b4[Te6edf3startTff7b72-T79c0ff1Tb4b4b4] Tff7b72in Ta5d6ff"Ta5d6ff_-Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3start Tff7b72-Tff7b72= T79c0ff1
Te6edf3has_at Tff7b72= Te6edf3start Tff7b72> T79c0ff0 Tff7b72and Te6edf3textTb4b4b4[Te6edf3startTff7b72-T79c0ff1Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff@Ta5d6ff"
Te6edf3token_start Tff7b72= Te6edf3start Tff7b72- T79c0ff1 Tff7b72if Te6edf3has_at Tff7b72else Te6edf3start
Te6edf3token Tff7b72= Te6edf3textTb4b4b4[Te6edf3startTb4b4b4:Te6edf3posTb4b4b4]
Tff7b72if Tff7b72not Te6edf3tokenTb4b4b4:
Tff7b72return Tff7b72False
Te6edf3prefix_lower Tff7b72= Te6edf3tokenTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Te6edf3matches Tff7b72= Tff7b72selfTff7b72.Td2a8ff_candidatesTb4b4b4(Te6edf3prefix_lowerTb4b4b4)
Tff7b72if Tff7b72not Te6edf3matchesTb4b4b4:
Tff7b72return Tff7b72False
Te6edf3idx Tff7b72= T79c0ff0
Te6edf3selected Tff7b72= Te6edf3matchesTb4b4b4[Te6edf3idxTb4b4b4]
Tff7b72if Te6edf3has_atTb4b4b4:
Te6edf3replacement Tff7b72= Ta5d6ff"Ta5d6ff@Ta5d6ff" Tff7b72+ Te6edf3selected
Tff7b72elif Te6edf3token_start Tff7b72== T79c0ff0Tb4b4b4:
Te6edf3replacement Tff7b72= Te6edf3selected Tff7b72+ Ta5d6ff"Ta5d6ff: Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3replacement Tff7b72= Te6edf3selected
Te6edf3new_text Tff7b72= Te6edf3textTb4b4b4[Tb4b4b4:Te6edf3token_startTb4b4b4] Tff7b72+ Te6edf3replacement Tff7b72+ Te6edf3textTb4b4b4[Te6edf3posTb4b4b4:Tb4b4b4]
Te6edf3new_cursor Tff7b72= Te6edf3token_start Tff7b72+ Tffa657lenTb4b4b4(Te6edf3replacementTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_edit_textTb4b4b4(Te6edf3new_textTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_edit_posTb4b4b4(Te6edf3new_cursorTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_tab_state Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffprefixTa5d6ff"Tb4b4b4: Te6edf3prefix_lowerTb4b4b4,
Ta5d6ff"Ta5d6fftoken_startTa5d6ff"Tb4b4b4: Te6edf3token_startTb4b4b4,
Ta5d6ff"Ta5d6ffhas_atTa5d6ff"Tb4b4b4: Te6edf3has_atTb4b4b4,
Ta5d6ff"Ta5d6ffcursor_afterTa5d6ff"Tb4b4b4: Te6edf3new_cursorTb4b4b4,
Ta5d6ff"Ta5d6ffidxTa5d6ff"Tb4b4b4: Te6edf3idxTb4b4b4,
Tb4b4b4}
Tff7b72return Tff7b72True
Tff7b72class T56d364RoomFrameTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffFrameTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl uTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fftoggle_usersTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl yTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffdisplayTff7b72.Td2a8fftoggle_channel_listTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6fff8Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffdisplayTff7b72.Td2a8fftoggle_join_part_collapseTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6fftabTa5d6ff"Tb4b4b4:
Te6edf3rw Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelegate
Te6edf3users_focusable Tff7b72= Tb4b4b4(
Te6edf3rw Tff7b72is Tff7b72not Tff7b72None
Tff7b72and Tffa657getattrTb4b4b4(Te6edf3rwTb4b4b4, Ta5d6ff"Ta5d6ffusers_visibleTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72and Tffa657lenTb4b4b4(Te6edf3rwTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffcontentsTb4b4b4) Tff7b72> T79c0ff1
Tff7b72and Te6edf3rwTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72is Te6edf3rwTff7b72.Td2a8ffusers_box
Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fffocus_position Tff7b72== Ta5d6ff"Ta5d6ffbodyTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fffocus_position Tff7b72= Ta5d6ff"Ta5d6fffooterTa5d6ff"
Tff7b72elif Te6edf3users_focusableTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3rwTff7b72.Td2a8ffcolumnsTff7b72.Td2a8fffocus_position Tff7b72= T79c0ff1
Tff7b72return Tff7b72None
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72selfTff7b72.Td2a8fffocus_position Tff7b72= Ta5d6ff"Ta5d6ffbodyTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fffocus_position Tff7b72= Ta5d6ff"Ta5d6ffbodyTa5d6ff"
Tff7b72return Tff7b72None
Tff7b72elif Tff7b72selfTff7b72.Td2a8fffocus_position Tff7b72== Ta5d6ff"Ta5d6ffbodyTa5d6ff"Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffdownTa5d6ff" Tff7b72and Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdelegateTb4b4b4, Ta5d6ff"Ta5d6ffmessagelistTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4) Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ffbottom_is_visibleTb4b4b4:
Tff7b72selfTff7b72.Td2a8fffocus_position Tff7b72= Ta5d6ff"Ta5d6fffooterTa5d6ff"
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffupTa5d6ff" Tff7b72and Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdelegateTb4b4b4, Ta5d6ff"Ta5d6ffmessagelistTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4) Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffmessagelistTff7b72.Td2a8fftop_is_visibleTb4b4b4:
Te6edf3nomadnetTff7b72.Td2a8ffNomadNetworkAppTff7b72.Td2a8ffget_shared_instanceTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffframeTff7b72.Td2a8fffocus_position Tff7b72= Ta5d6ff"Ta5d6ffheaderTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3RoomFrameTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3RoomFrameTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72class T56d364RoomWidgetTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
Te6edf3USERS_PANE_WIDTH Tff7b72= T79c0ff22
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3displayTb4b4b4, Te6edf3hubTb4b4b4, Te6edf3roomTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdisplay Tff7b72= Te6edf3display
Tff7b72selfTff7b72.Td2a8ffhub Tff7b72= Te6edf3hub
Tff7b72selfTff7b72.Td2a8ffroom Tff7b72= Te6edf3room
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3nomadnetTff7b72.Td2a8ffNomadNetworkAppTff7b72.Td2a8ffget_shared_instanceTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessagelist Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflast_history_clean Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffpeer_info_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffmsg_header_sentTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_update_peer_infoTb4b4b4(Tb4b4b4)
Te6edf3editor Tff7b72= Te6edf3RoomMessageEditTb4b4b4(Te6edf3captionTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3edit_textTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3multilineTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3editorTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffeditor Tff7b72= Te6edf3editor
Te6edf3urwidTff7b72.Td2a8ffconnect_signalTb4b4b4(Te6edf3editorTb4b4b4, Ta5d6ff"Ta5d6ffpostchangeTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_on_editor_changeTb4b4b4)
Te6edf3editor_attr Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3editorTb4b4b4, Ta5d6ff"Ta5d6ffmsg_editorTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink_delegate Tff7b72= Te6edf3_ChatLinkDelegateTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdisplayTb4b4b4, Tff7b72selfTff7b72.Td2a8ffhubTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_messagesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframe Tff7b72= Te6edf3RoomFrameTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffmessagelistTb4b4b4,
Te6edf3headerTff7b72=Tff7b72selfTff7b72.Td2a8ffpeer_info_widgetTb4b4b4,
Te6edf3footerTff7b72=Te6edf3editor_attrTb4b4b4,
Te6edf3focus_partTff7b72=Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffchat_box Tff7b72= Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffusers_walker Tff7b72= Te6edf3urwidTff7b72.Td2a8ffSimpleFocusListWalkerTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffusers_listbox Tff7b72= Te6edf3urwidTff7b72.Td2a8ffListBoxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffusers_walkerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffusers_box Tff7b72= Te6edf3UsersBoxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffusers_listboxTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffUsersTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffusers_boxTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffusers_gutter Tff7b72= Te6edf3UsersExpandGutterTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffshow_gutters Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrc_show_gutters
Tff7b72selfTff7b72.Td2a8ff_refresh_users_paneTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffusers_visible Tff7b72= Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ffusers_visible
Tff7b72selfTff7b72.Td2a8ffcolumns Tff7b72= Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff1Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffchat_boxTb4b4b4)Tb4b4b4]Tb4b4b4, Te6edf3dividecharsTff7b72=T79c0ff0Tb4b4b4, Te6edf3focus_columnTff7b72=T79c0ff0Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_apply_users_visibilityTb4b4b4(Tb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffcolumnsTb4b4b4)
Tff7b72def Td2a8fftoggle_usersTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffusers_visible Tff7b72= Tff7b72not Tff7b72selfTff7b72.Td2a8ffusers_visible
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ffusers_visible Tff7b72= Tff7b72selfTff7b72.Td2a8ffusers_visible
Tff7b72selfTff7b72.Td2a8ff_apply_users_visibilityTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_apply_users_visibilityTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffusers_visibleTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffcontents Tff7b72= Tb4b4b4[
Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffchat_boxTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffusers_boxTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffGIVENTb4b4b4, Te6edf3RoomWidgetTff7b72.Td2a8ffUSERS_PANE_WIDTHTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffshow_guttersTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffcontents Tff7b72= Tb4b4b4[
Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffchat_boxTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffusers_gutterTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffGIVENTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffcontents Tff7b72= Tb4b4b4[
Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffchat_boxTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4)
Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffcolumnsTff7b72.Td2a8fffocus_position Tff7b72= T79c0ff0
Tff7b72def Td2a8ff_refresh_users_paneTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3g Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffglyphs
Te6edf3walker Tff7b72= Tff7b72selfTff7b72.Td2a8ffusers_walker
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhub Tff7b72is Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffroom Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3walkerTb4b4b4[Tb4b4b4:Tb4b4b4] Tff7b72= Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4]
Tff7b72return
Te6edf3members Tff7b72= Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffget_membersTb4b4b4(Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4)
Te6edf3own_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffidentityTff7b72.Td2a8ffhash Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffidentity Tff7b72is Tff7b72not Tff7b72None Tff7b72else Tff7b72None
Tff7b72def Td2a8ff_safe_nameTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3rawTb4b4b4: Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftextuiTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffsanitize_namesTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72return Te6edf3sanitize_nameTb4b4b4(Tffa657strTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"
Tff7b72return Te6edf3strip_modifiersTb4b4b4(Tffa657strTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tffa657strTb4b4b4(Te6edf3raw Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3entries Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3m Tff7b72in Te6edf3membersTb4b4b4:
Te6edf3safe_name Tff7b72= Te6edf3_safe_nameTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffdisplay_name_forTb4b4b4(Te6edf3mTb4b4b4)Tb4b4b4)
Te6edf3safe_name Tff7b72= Te6edf3safe_nameTb4b4b4[Tb4b4b4:T79c0ff15Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff…Ta5d6ff" Tff7b72if Tffa657lenTb4b4b4(Te6edf3safe_nameTb4b4b4) Tff7b72> T79c0ff16 Tff7b72else Te6edf3safe_name
Te6edf3entriesTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3safe_nameTb4b4b4, Te6edf3mTb4b4b4, Te6edf3own_hash Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3m Tff7b72== Te6edf3own_hashTb4b4b4)Tb4b4b4)
Te6edf3entriesTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3xTb4b4b4: Te6edf3xTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3prev_focus_key Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3prev_idx Tff7b72= Te6edf3walkerTff7b72.Td2a8fffocus
Tff7b72if Te6edf3prev_idx Tff7b72is Tff7b72not Tff7b72None Tff7b72and T79c0ff0 Tff7b72<Tff7b72= Te6edf3prev_idx Tff7b72< Tffa657lenTb4b4b4(Te6edf3walkerTb4b4b4)Tb4b4b4:
Te6edf3prev_focus_key Tff7b72= Tffa657getattrTb4b4b4(Te6edf3walkerTb4b4b4[Te6edf3prev_idxTb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6ffuser_hashTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3prev_focus_key Tff7b72= Tff7b72None
Te6edf3rows Tff7b72= Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tffa657lenTb4b4b4(Te6edf3entriesTb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff userTa5d6ff"Tff7b72+Tb4b4b4(Ta5d6ff"Ta5d6ffsTa5d6ff" Tff7b72if Tffa657lenTb4b4b4(Te6edf3entriesTb4b4b4) Tff7b72!= T79c0ff1 Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4]
Tff7b72for Te6edf3nameTb4b4b4, Te6edf3peer_hashTb4b4b4, Te6edf3is_self Tff7b72in Te6edf3entriesTb4b4b4:
Tff7b72if Te6edf3is_selfTb4b4b4:
Te6edf3label Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffarrow_rTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3name
Te6edf3style Tff7b72= Ta5d6ff"Ta5d6fflist_trustedTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3label Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffpeerTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3name
Te6edf3style Tff7b72= Ta5d6ff"Ta5d6ffconnected_statusTa5d6ff"
Te6edf3entry Tff7b72= Te6edf3ChannelListEntryTb4b4b4(Te6edf3labelTb4b4b4)
Te6edf3urwidTff7b72.Td2a8ffconnect_signalTb4b4b4(Te6edf3entryTb4b4b4, Ta5d6ff"Ta5d6ffclickTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ffshow_user_infoTb4b4b4, Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffhubTb4b4b4, Te6edf3peer_hashTb4b4b4, Te6edf3nameTb4b4b4)Tb4b4b4)
Te6edf3row Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3entryTb4b4b4, Te6edf3styleTb4b4b4, Ta5d6ff"Ta5d6fflist_focusTa5d6ff"Tb4b4b4)
Te6edf3rowTff7b72.Td2a8ffuser_hash Tff7b72= Te6edf3peer_hash
Te6edf3rowsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3rowTb4b4b4)
Tff7b72if Tff7b72not Te6edf3entriesTb4b4b4:
Te6edf3rowsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff (no members)Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3walkerTb4b4b4[Tb4b4b4:Tb4b4b4] Tff7b72= Te6edf3rows
Te6edf3new_focus Tff7b72= Tff7b72None
Tff7b72if Te6edf3prev_focus_key Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72for Te6edf3idxTb4b4b4, Te6edf3w Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3walkerTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657getattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ffuser_hashTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4) Tff7b72== Te6edf3prev_focus_keyTb4b4b4:
Te6edf3new_focus Tff7b72= Te6edf3idx
Tff7b72break
Tff7b72if Te6edf3new_focus Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72for Te6edf3idxTb4b4b4, Te6edf3w Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3walkerTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ffuser_hashTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3new_focus Tff7b72= Te6edf3idx
Tff7b72break
Tff7b72if Te6edf3new_focus Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3walkerTff7b72.Td2a8ffset_focusTb4b4b4(Te6edf3new_focusTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4: Tff7b72pass
Tff7b72def Td2a8ff_update_peer_infoTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhub Tff7b72is Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffroom Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpeer_info_widgetTff7b72.Td2a8fforiginal_widgetTff7b72.Td2a8ffset_textTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72return
Te6edf3status_label Tff7b72= Tb4b4b4{
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_DISCONNECTEDTb4b4b4: Ta5d6ff"Ta5d6ffDisconnectedTa5d6ff"Tb4b4b4,
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTINGTb4b4b4: Ta5d6ff"Ta5d6ffConnectingTa5d6ff"Tb4b4b4,
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTEDTb4b4b4: Ta5d6ff"Ta5d6ffConnectedTa5d6ff"Tb4b4b4,
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_FAILEDTb4b4b4: Ta5d6ff"Ta5d6ffFailedTa5d6ff"Tb4b4b4,
Tb4b4b4}Tff7b72.Td2a8ffgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffstatusTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3server Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffhub_nameTb4b4b4:
Te6edf3server Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffglyphsTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffhub_name
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffhub_versionTb4b4b4:
Te6edf3server Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff vTa5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffhub_version
Te6edf3left Tff7b72= Ta5d6ff"Ta5d6ff #Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffroomTff7b72+Te6edf3serverTff7b72+Ta5d6ff"Ta5d6ff (Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffnameTff7b72+Ta5d6ff"Ta5d6ff)Ta5d6ff"
Te6edf3right Tff7b72= Te6edf3status_labelTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffpeer_info_widgetTff7b72.Td2a8fforiginal_widgetTff7b72.Td2a8ffset_textTb4b4b4(Te6edf3leftTff7b72+Ta5d6ff"Ta5d6ff | Ta5d6ff"Tff7b72+Te6edf3rightTb4b4b4)
Tff7b72def Td2a8ffupdate_messagesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3replaceTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3msgs Tff7b72= Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffget_messagesTb4b4b4(Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4) Tff7b72if Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffhub Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8ffroom Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4) Tff7b72else Tb4b4b4[Tb4b4b4]
Te6edf3widgets Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3collapse Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdisplayTb4b4b4, Ta5d6ff"Ta5d6ffcollapse_join_partTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Te6edf3run Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffflush_runTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3runTb4b4b4:
Tff7b72return
Te6edf3widgetsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3_collapsed_joinpart_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tffa657lenTb4b4b4(Te6edf3runTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3runTff7b72.Td2a8ffclearTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3m Tff7b72in Te6edf3msgsTb4b4b4:
Tff7b72if Te6edf3collapse Tff7b72and Te6edf3_is_joinpart_systemTb4b4b4(Te6edf3mTb4b4b4)Tb4b4b4:
Te6edf3runTff7b72.Td2a8ffappendTb4b4b4(Te6edf3mTb4b4b4)
Tff7b72continue
Te6edf3flush_runTb4b4b4(Tb4b4b4)
Te6edf3widgetsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3_message_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tff7b72selfTff7b72.Td2a8ffhubTb4b4b4, Te6edf3mTb4b4b4, Te6edf3link_delegateTff7b72=Tff7b72selfTff7b72.Td2a8fflink_delegateTb4b4b4)Tb4b4b4)
Te6edf3flush_runTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3widgetsTb4b4b4:
Te6edf3widgets Tff7b72= Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Tb4b4b4[Tb4b4b4(Ta5d6ff"Ta5d6ffirc_systemTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffglyphsTb4b4b4[Ta5d6ff"Ta5d6ffinfoTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff No messages yetTa5d6ff"Tb4b4b4)Tb4b4b4]Tb4b4b4)Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_empty_placeholder Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_empty_placeholder Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffmessagelist Tff7b72= Te6edf3IndicativeListBoxTb4b4b4(Te6edf3widgetsTb4b4b4, Te6edf3positionTff7b72=Tffa657lenTb4b4b4(Te6edf3widgetsTb4b4b4)Tff7b72-T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ffname Tff7b72= Ta5d6ff"Ta5d6ffmessagelistTa5d6ff"
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ff_listboxTff7b72.Td2a8ffset_focus_valignTb4b4b4(Ta5d6ff"Ta5d6ffbottomTa5d6ff"Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72if Te6edf3replace Tff7b72and Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffframeTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6ffbodyTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessagelistTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffusers_walkerTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_refresh_users_paneTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffappend_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3msgTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessagelist Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_messagesTb4b4b4(Te6edf3replaceTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return
Tff7b72tryTb4b4b4:
Te6edf3widget Tff7b72= Te6edf3_message_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tff7b72selfTff7b72.Td2a8ffhubTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3link_delegateTff7b72=Tff7b72selfTff7b72.Td2a8fflink_delegateTb4b4b4)
Te6edf3wrapped Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3widgetTb4b4b4, Tff7b72NoneTb4b4b4)
Te6edf3body Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ffget_bodyTb4b4b4(Tb4b4b4)
Te6edf3was_at_bottom Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ff_empty_placeholderTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4) Tff7b72or Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessagelistTb4b4b4, Ta5d6ff"Ta5d6ffbottom_is_visibleTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tffa657getattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ff_empty_placeholderTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72del Te6edf3bodyTb4b4b4[Tb4b4b4:Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_empty_placeholder Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffclean_last_removed Tff7b72> Tff7b72selfTff7b72.Td2a8fflast_history_cleanTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3hub_msgs Tff7b72= Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffget_messagesTb4b4b4(Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4) Tff7b72if Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffhub Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8ffroom Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4) Tff7b72else Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fflast_history_clean Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3c Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ffbody_lenTb4b4b4(Tb4b4b4)
Te6edf3old Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3cTb4b4b4)Tb4b4b4:
Te6edf3msg Tff7b72= Tff7b72None
Te6edf3w Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ffget_itemTb4b4b4(Te6edf3iTb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ff_original_widgetTa5d6ff"Tb4b4b4)Tb4b4b4: Te6edf3o Tff7b72= Te6edf3wTff7b72.Td2a8ff_original_widget
Tff7b72elseTb4b4b4: Te6edf3o Tff7b72= Tff7b72None
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3oTb4b4b4, Ta5d6ff"Ta5d6ffmsgTa5d6ff"Tb4b4b4)Tb4b4b4: Te6edf3msg Tff7b72= Te6edf3oTff7b72.Td2a8ffmsg
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ffmsgTa5d6ff"Tb4b4b4)Tb4b4b4: Te6edf3msg Tff7b72= Te6edf3wTff7b72.Td2a8ffmsg
Tff7b72if Te6edf3msg Tff7b72and Tff7b72not Te6edf3msg Tff7b72in Te6edf3hub_msgsTb4b4b4: Te6edf3oldTff7b72.Td2a8ffaddTb4b4b4(Te6edf3iTb4b4b4)
Tff7b72for Te6edf3i Tff7b72in Tffa657reversedTb4b4b4(Tffa657listTb4b4b4(Te6edf3oldTb4b4b4)Tb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ffdelete_positionTb4b4b4(Te6edf3iTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while cleaning room historyTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Te6edf3bodyTff7b72.Td2a8ffappendTb4b4b4(Te6edf3wrappedTb4b4b4)
Te6edf3cap Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffrrc_history_per_room_capTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72if Te6edf3cap Tff7b72and Te6edf3cap Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72while Tffa657lenTb4b4b4(Te6edf3bodyTb4b4b4) Tff7b72> Te6edf3capTb4b4b4:
Tff7b72del Te6edf3bodyTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Te6edf3was_at_bottomTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ff_listboxTff7b72.Td2a8ffset_focusTb4b4b4(Tffa657lenTb4b4b4(Te6edf3bodyTb4b4b4)Tff7b72-T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ff_listboxTff7b72.Td2a8ffset_focus_valignTb4b4b4(Ta5d6ff"Ta5d6ffbottomTa5d6ff"Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffIncremental append failed, falling back: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_messagesTb4b4b4(Te6edf3replaceTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffusers_walkerTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_refresh_users_paneTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_on_editor_changeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3editorTb4b4b4, Te6edf3old_textTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessagelist Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Te6edf3body Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ff_listboxTff7b72.Td2a8ffbody
Tff7b72if Tffa657lenTb4b4b4(Te6edf3bodyTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ff_listboxTff7b72.Td2a8ffset_focusTb4b4b4(Tffa657lenTb4b4b4(Te6edf3bodyTb4b4b4)Tff7b72-T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessagelistTff7b72.Td2a8ff_listboxTff7b72.Td2a8ffset_focus_valignTb4b4b4(Ta5d6ff"Ta5d6ffbottomTa5d6ff"Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffsend_messageTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3text Tff7b72= Tff7b72selfTff7b72.Td2a8ffeditorTff7b72.Td2a8ffget_edit_textTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3textTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72if Te6edf3textTff7b72.Td2a8fflstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_handle_slash_commandTb4b4b4(Te6edf3textTff7b72.Td2a8fflstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffeditorTff7b72.Td2a8ffset_edit_textTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffstatus Tff7b72!= Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTEDTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffconnectTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72return
Te6edf3limit Tff7b72= Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffmax_msg_body_bytes Tff7b72or T79c0ff350
Tff7b72if Tffa657lenTb4b4b4(Te6edf3textTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4) Tff7b72> Te6edf3limitTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_open_split_dialogTb4b4b4(Te6edf3textTb4b4b4, Te6edf3limitTb4b4b4)
Tff7b72return
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffsend_messageTb4b4b4(Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4, Te6edf3textTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffeditorTff7b72.Td2a8ffset_edit_textTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffFailed to send RRC message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ff_open_split_dialogTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4, Te6edf3limitTb4b4b4)Tb4b4b4:
Te6edf3body_bytes Tff7b72= Tffa657lenTb4b4b4(Te6edf3textTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3parts Tff7b72= Te6edf3_split_messageTb4b4b4(Te6edf3textTb4b4b4, Te6edf3limitTb4b4b4)
Tff7b72if Tff7b72not Te6edf3partsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffMessage is Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3body_bytesTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bytes but per-message limit is too small to split.Ta5d6ff"Tb4b4b4)
Tff7b72return
Te6edf3K Tff7b72= Tffa657lenTb4b4b4(Te6edf3partsTb4b4b4)
Te6edf3preview Tff7b72= Te6edf3partsTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3previewTb4b4b4) Tff7b72> T79c0ff70Tb4b4b4:
Te6edf3preview Tff7b72= Te6edf3previewTb4b4b4[Tb4b4b4:T79c0ff70Tb4b4b4] Tff7b72+ Ta5d6ff"Ta5d6ff…Ta5d6ff"
Te6edf3preview Tff7b72= Te6edf3previewTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\tTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)
Te6edf3error_text Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffcancelTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffsend_splitTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72for Te6edf3p Tff7b72in Te6edf3partsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffsend_messageTb4b4b4(Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4, Te6edf3pTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffeditorTff7b72.Td2a8ffset_edit_textTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3error_textTff7b72.Td2a8ffset_textTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6fferror_textTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffSend failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3ChannelsDialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Message is Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3body_bytesTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bytes.Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Hub limit : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3limitTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bytes per message.Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Split into Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3KTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff messageTa5d6ff"Tff7b72+Tb4b4b4(Ta5d6ff"Ta5d6ffsTa5d6ff" Tff7b72if Te6edf3K Tff7b72!= T79c0ff1 Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Preview of part 1:Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3previewTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffirc_systemTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3error_textTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffSend SplitTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3send_splitTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffCancelTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3cancelTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffMessage Too LongTa5d6ff"
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72selfTff7b72.Td2a8ffdisplay
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ff_show_dialog_overlayTb4b4b4(Te6edf3dialogTb4b4b4)
Tff7b72def Td2a8ff_local_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3kindTb4b4b4, Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72from T7ee787nomadnetT7ee787.T7ee787RRC Tff7b72import Te6edf3RRCMessage
Te6edf3msg Tff7b72= Te6edf3RRCMessageTb4b4b4(Te6edf3kindTb4b4b4, Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Te6edf3textTb4b4b4, Tffa657intTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72*T79c0ff1000Tb4b4b4)Tb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3buf Tff7b72= Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffsetdefaultTb4b4b4(Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4)
Te6edf3bufTff7b72.Td2a8ffappendTb4b4b4(Te6edf3msgTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3bufTb4b4b4) Tff7b72> T79c0ff500Tb4b4b4:
Tff7b72del Te6edf3bufTb4b4b4[Tb4b4b4:Tffa657lenTb4b4b4(Te6edf3bufTb4b4b4)Tff7b72-T79c0ff500Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffmanagerTff7b72.Td2a8ff_notify_messagesTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhubTb4b4b4, Te6edf3msgTb4b4b4)
T8b949e# printed /help
Te6edf3SLASH_HELP Tff7b72= Tb4b4b4[
Ta5d6ff"Ta5d6ff/help - show this listTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/ping - measure round-trip to hubTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/list - list public rooms on this hubTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/join <room> - join a room on this hubTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/part [room] - leave a room (default: current)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/leave [room] - alias for /partTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/nick <name> - set your nick on this hub onlyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/who [room] - list users (current room if omitted)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/names [room] - alias for /whoTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/clear - clear local messages in this roomTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/connect - connect this hubTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/disconnect - disconnect this hubTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/quit - alias for /disconnectTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffServer-side commands (auth enforced by hub):Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/topic <room> [text] - view or set room topicTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/mode <room> [+-flags] [arg] - view or set room modesTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/register <room> - register the current roomTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/unregister <room> - unregister the current roomTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/kick <room> <target> - remove user from roomTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/ban <room> add|del|list [target] - room ban listTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/invite <room> add|del|list [target] - room invite listTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/op <room> <target> - grant opTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/deop <room> <target> - revoke opTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/voice <room> <target> - grant voiceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/devoice <room> <target> - revoke voiceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/kline add|del|list [target] - global banTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/stats - server statisticsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/reload - reload server configTa5d6ff"Tb4b4b4,
Tb4b4b4]
T8b949e# commands that we forward to the server verbatim
Te6edf3SERVER_SLASH_COMMANDS Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffwhoTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnamesTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftopicTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffkickTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffklineTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbanTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffinviteTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffklineTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffopTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdeopTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffvoiceTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdevoiceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffregisterTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffunregisterTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffstatsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffreloadTa5d6ff"Tb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ff_require_connectedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffstatus Tff7b72!= Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTEDTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffNot connected to hubTa5d6ff"Tb4b4b4)
Tff7b72return Tff7b72False
Tff7b72return Tff7b72True
Tff7b72def Td2a8ff_handle_slash_commandTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4)Tb4b4b4:
Te6edf3parts Tff7b72= Te6edf3textTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4]Tff7b72.Td2a8ffsplitTb4b4b4(Tff7b72NoneTb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3parts Tff7b72or Tff7b72not Te6edf3partsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffEmpty commandTa5d6ff"Tb4b4b4)
Tff7b72return
Te6edf3cmd Tff7b72= Te6edf3partsTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Te6edf3arg Tff7b72= Te6edf3partsTb4b4b4[T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72if Tffa657lenTb4b4b4(Te6edf3partsTb4b4b4) Tff7b72> T79c0ff1 Tff7b72else Ta5d6ff"Ta5d6ff"
Tff7b72if Te6edf3cmd Tff7b72== Ta5d6ff"Ta5d6ffhelpTa5d6ff"Tb4b4b4:
Tff7b72for Te6edf3line Tff7b72in Tff7b72selfTff7b72.Td2a8ffSLASH_HELPTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6ffsystemTa5d6ff"Tb4b4b4, Te6edf3lineTb4b4b4)
Tff7b72return
Tff7b72if Te6edf3cmd Tff7b72== Ta5d6ff"Ta5d6ffpingTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_require_connectedTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffsend_pingTb4b4b4(Te6edf3roomTff7b72=Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6ffsystemTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffPing sentTa5d6ff"Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffPing failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72return
Tff7b72if Te6edf3cmd Tff7b72== Ta5d6ff"Ta5d6fflistTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_require_connectedTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffsend_commandTb4b4b4(Ta5d6ff"Ta5d6ff/listTa5d6ff"Tb4b4b4, Te6edf3roomTff7b72=Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/list failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72return
Tff7b72if Te6edf3cmd Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffjoinTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffjTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3argTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffUsage: /join <room>Ta5d6ff"Tb4b4b4)
Tff7b72return
Te6edf3target Tff7b72= Te6edf3argTff7b72.Td2a8fflstripTb4b4b4(Ta5d6ff"Ta5d6ff#Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffadd_roomTb4b4b4(Te6edf3targetTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTEDTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffjoin_roomTb4b4b4(Te6edf3targetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ff_select_roomTb4b4b4(Tff7b72NoneTb4b4b4, Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffhubTb4b4b4, Te6edf3targetTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffJoin failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72return
Tff7b72if Te6edf3cmd Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffpartTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffleaveTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3target Tff7b72= Tb4b4b4(Te6edf3argTff7b72.Td2a8fflstripTb4b4b4(Ta5d6ff"Ta5d6ff#Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72if Te6edf3arg Tff7b72else Tff7b72selfTff7b72.Td2a8ffroom
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffpart_roomTb4b4b4(Te6edf3targetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3target Tff7b72== Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ffshow_placeholderTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffPart failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72return
Tff7b72if Te6edf3cmd Tff7b72== Ta5d6ff"Ta5d6ffnickTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3argTb4b4b4:
Te6edf3cur Tff7b72= Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffget_effective_nickTb4b4b4(Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff unsetTa5d6ff"
Te6edf3src Tff7b72= Ta5d6ff"Ta5d6ffnick: Ta5d6ff" Tff7b72if Tb4b4b4(Tffa657isinstanceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffnick_overrideTb4b4b4, Tffa657strTb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffnick_overrideTb4b4b4) Tff7b72else Ta5d6ff"Ta5d6ffglobalTa5d6ff"
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6ffsystemTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffNick on this hub: Ta5d6ff"Tff7b72+Te6edf3curTff7b72+Ta5d6ff"Ta5d6ff (Ta5d6ff"Tff7b72+Te6edf3srcTff7b72+Ta5d6ff"Ta5d6ff)Ta5d6ff"Tb4b4b4)
Tff7b72return
Te6edf3limit Tff7b72= Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffmax_nick_bytes Tff7b72or T79c0ff32
Tff7b72if Tffa657lenTb4b4b4(Te6edf3argTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4) Tff7b72> Te6edf3limitTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffNick too long (max Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3limitTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bytes)Ta5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffset_nick_overrideTb4b4b4(Te6edf3argTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6ffsystemTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffNick on this hub set to Ta5d6ff"Tff7b72+Te6edf3argTff7b72+
Ta5d6ff"Ta5d6ff (use /nick with no argument to view)Ta5d6ff"Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffNick change failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72return
Tff7b72if Te6edf3cmd Tff7b72== Ta5d6ff"Ta5d6ffclearTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffclear_messagesTb4b4b4(Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_messagesTb4b4b4(Te6edf3replaceTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return
Tff7b72if Te6edf3cmd Tff7b72== Ta5d6ff"Ta5d6ffconnectTa5d6ff"Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffconnectTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6ffsystemTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffConnecting...Ta5d6ff"Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffConnect failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72return
Tff7b72if Te6edf3cmd Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffdisconnectTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffquitTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffdisconnectTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffDisconnect failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72return
Tff7b72if Te6edf3cmd Tff7b72in Tff7b72selfTff7b72.Td2a8ffSERVER_SLASH_COMMANDSTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_require_connectedTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffsend_commandTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3cmdTff7b72+Tb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3arg Tff7b72if Te6edf3arg Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3roomTff7b72=Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3cmdTff7b72+Ta5d6ff"Ta5d6ff failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72return
Tff7b72selfTff7b72.Td2a8ff_local_messageTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffUnknown command: /Ta5d6ff"Tff7b72+Te6edf3cmdTff7b72+Ta5d6ff"Ta5d6ff (try /help)Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffleave_roomTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffpart_roomTb4b4b4(Tff7b72selfTff7b72.Td2a8ffroomTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ffshow_placeholderTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_ts_prefixTb4b4b4(Te6edf3ts_msTb4b4b4)Tb4b4b4:
Te6edf3t Tff7b72= Te6edf3_format_tsTb4b4b4(Te6edf3ts_msTb4b4b4) Tff7b72if Te6edf3ts_ms Tff7b72else Ta5d6ff"Ta5d6ff Ta5d6ff"
Tff7b72return Tb4b4b4(Ta5d6ff"Ta5d6ffirc_tsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff [Ta5d6ff"Tff7b72+Te6edf3tTff7b72+Ta5d6ff"Ta5d6ff] Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_ts_prefix_rawTb4b4b4(Te6edf3ts_msTb4b4b4)Tb4b4b4:
Te6edf3t Tff7b72= Te6edf3_format_tsTb4b4b4(Te6edf3ts_msTb4b4b4) Tff7b72if Te6edf3ts_ms Tff7b72else Ta5d6ff"Ta5d6ff Ta5d6ff"
Tff7b72return Ta5d6ff"Ta5d6ff[Ta5d6ff"Tff7b72+Te6edf3tTff7b72+Ta5d6ff"Ta5d6ff] Ta5d6ff"
Tff7b72class T56d364_ChatLinkDelegateTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3displayTb4b4b4, Te6edf3hubTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdisplay Tff7b72= Te6edf3display
Tff7b72selfTff7b72.Td2a8ffhub Tff7b72= Te6edf3hub
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3displayTff7b72.Td2a8ffapp
Tff7b72selfTff7b72.Td2a8fflast_keypress Tff7b72= T79c0ff0
Tff7b72def Td2a8ffmarked_linkTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3targetTb4b4b4, Te6edf3fieldsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffmicron_released_focusTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffhandle_linkTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3targetTb4b4b4, Te6edf3fieldsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3target Tff7b72is Tff7b72NoneTb4b4b4: Tff7b72return
Tff7b72tryTb4b4b4:
Te6edf3components Tff7b72= Te6edf3targetTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff://Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72< T79c0ff2Tb4b4b4: Tff7b72return
Te6edf3kind Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3payload Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3kind Tff7b72== Ta5d6ff"Ta5d6ffroomTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_open_roomTb4b4b4(Te6edf3payloadTff7b72.Td2a8fflstripTb4b4b4(Ta5d6ff"Ta5d6ff#Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3kind Tff7b72== Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_open_lxmfTb4b4b4(Te6edf3payloadTff7b72.Td2a8fflstripTb4b4b4(Ta5d6ff"Ta5d6fflxmf@Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3kind Tff7b72== Ta5d6ff"Ta5d6ffpageTa5d6ff"Tb4b4b4:
Te6edf3final_url Tff7b72= Te6edf3payload
Tff7b72if Te6edf3fieldsTb4b4b4:
Te6edf3final_url Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff`Ta5d6ff"
Tff7b72for Te6edf3f Tff7b72in Te6edf3fieldsTb4b4b4: Te6edf3final_url Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3fTffd700}Ta5d6ff|Ta5d6ff"
Te6edf3final_urlTff7b72.Td2a8ffrstripTb4b4b4(Ta5d6ff"Ta5d6ff|Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_open_pageTb4b4b4(Te6edf3final_urlTb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffInvalid URL: Tffd700{Te6edf3targetTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffChat link handler failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ff_open_roomTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3roomTb4b4b4)Tb4b4b4:
Te6edf3room Tff7b72= Tb4b4b4(Te6edf3room Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3roomTb4b4b4:
Tff7b72return
Tff7b72if Te6edf3room Tff7b72not Tff7b72in Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffrooms Tff7b72and Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTEDTb4b4b4:
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffjoin_roomTb4b4b4(Te6edf3roomTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4: Tff7b72pass
Tff7b72selfTff7b72.Td2a8ffhubTff7b72.Td2a8ffadd_roomTb4b4b4(Te6edf3roomTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplayTff7b72.Td2a8ff_select_roomTb4b4b4(Tff7b72NoneTb4b4b4, Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffhubTb4b4b4, Te6edf3roomTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ff_open_lxmfTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hash_hexTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3hash_hexTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return
Tff7b72from T7ee787nomadnetT7ee787.T7ee787Directory Tff7b72import Te6edf3DirectoryEntry
Te6edf3existing Tff7b72= Tb4b4b4[Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72for Te6edf3c Tff7b72in Te6edf3nomadnetTff7b72.Td2a8ffConversationTff7b72.Td2a8ffconversation_listTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4)Tb4b4b4]
Tff7b72if Te6edf3hash_hex Tff7b72not Tff7b72in Te6edf3existingTb4b4b4:
Te6edf3display_name Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3data Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecall_app_dataTb4b4b4(Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3hash_hexTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3data Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72import T7ee787LXMF
Te6edf3display_name Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffdisplay_name_from_app_dataTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffrememberTb4b4b4(Te6edf3DirectoryEntryTb4b4b4(Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3hash_hexTb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72=Te6edf3display_nameTb4b4b4)Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72tryTb4b4b4:
Te6edf3nomadnetTff7b72.Td2a8ffConversationTb4b4b4(Te6edf3hash_hexTb4b4b4, Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Te6edf3initiatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Te6edf3conversations Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffsub_displaysTff7b72.Td2a8ffconversations_display
Te6edf3conversationsTff7b72.Td2a8ffupdate_conversation_listTb4b4b4(Tb4b4b4)
Te6edf3conversationsTff7b72.Td2a8ffdisplay_conversationTb4b4b4(Tff7b72NoneTb4b4b4, Te6edf3hash_hexTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffshow_conversationsTb4b4b4(Tff7b72NoneTb4b4b4)
Tff7b72def Td2a8ff_open_pageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3urlTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffshow_networkTb4b4b4(Tff7b72NoneTb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffsub_displaysTff7b72.Td2a8ffnetwork_displayTff7b72.Td2a8ffbrowserTff7b72.Td2a8ffretrieve_urlTb4b4b4(Te6edf3urlTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not open page link: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3_MOTD_ROOM_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff(?<!Ta5d6ff\Ta5d6ff[)(?<!Ta5d6ff\Ta5d6ffw)#([A-Za-z0-9][A-Za-z0-9_Ta5d6ff\Ta5d6ff-]Ta5d6ff{Ta5d6ff0,62})Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_linkify_motdTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3textTb4b4b4:
Tff7b72return Te6edf3text Tff7b72or Ta5d6ff"Ta5d6ff"
Tff7b72def Td2a8ffreplTb4b4b4(Te6edf3mTb4b4b4)Tb4b4b4:
Te6edf3name Tff7b72= Te6edf3mTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ff`[Ta5d6ff"Tff7b72+Te6edf3mTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff0Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff`room://Ta5d6ff"Tff7b72+Te6edf3nameTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"
Tff7b72return Te6edf3_MOTD_ROOM_RETff7b72.Td2a8ffsubTb4b4b4(Te6edf3replTb4b4b4, Te6edf3textTb4b4b4)
Tff7b72def Td2a8ff_is_joinpart_systemTb4b4b4(Te6edf3mTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657getattrTb4b4b4(Te6edf3mTb4b4b4, Ta5d6ff"Ta5d6ffkindTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4) Tff7b72!= Ta5d6ff"Ta5d6ffsystemTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72False
Te6edf3text Tff7b72= Tb4b4b4(Tffa657getattrTb4b4b4(Te6edf3mTb4b4b4, Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3textTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72if Te6edf3textTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffYou Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Te6edf3textTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff joinedTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3textTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff leftTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_collapsed_joinpart_widgetTb4b4b4(Te6edf3appTb4b4b4, Te6edf3nTb4b4b4)Tb4b4b4:
Te6edf3label Tff7b72= Ta5d6ff"Ta5d6ff ⋯ Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3nTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff join/leave eventTa5d6ff"Tff7b72+Tb4b4b4(Ta5d6ff"Ta5d6ff" Tff7b72if Te6edf3n Tff7b72== T79c0ff1 Tff7b72else Ta5d6ff"Ta5d6ffsTa5d6ff"Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff ⋯Ta5d6ff"
Tff7b72return Te6edf3urwidTff7b72.Td2a8ffPaddingTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Te6edf3labelTb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffirc_systemTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3leftTff7b72=T79c0ff1Tb4b4b4)
Tff7b72def Td2a8ffget_nick_colorTb4b4b4(Te6edf3sender_hashTb4b4b4, Te6edf3themeTb4b4b4, Te6edf3appTb4b4b4, Te6edf3shiftTff7b72=T79c0ff15Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3appTff7b72.Td2a8ffrrc_nick_colors_themeTb4b4b4: Te6edf3nick_colors Tff7b72= Te6edf3appTff7b72.Td2a8ffrrc_nick_colors_theme
Tff7b72elseTb4b4b4: Te6edf3nick_colors Tff7b72= Te6edf3themeTb4b4b4[Ta5d6ff"Ta5d6ffnick_colorsTa5d6ff"Tb4b4b4]
Tff7b72if Tffa657typeTb4b4b4(Te6edf3sender_hashTb4b4b4) Tff7b72== Tffa657strTb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3sender_hash Tff7b72= Te6edf3sender_hashTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72pass
Tff7b72if Tff7b72not Tffa657typeTb4b4b4(Te6edf3sender_hashTb4b4b4) Tff7b72== Tffa657bytesTb4b4b4: Tff7b72return Te6edf3themeTb4b4b4[Ta5d6ff"Ta5d6ffnick_peerTa5d6ff"Tb4b4b4]
Tff7b72return Te6edf3nick_colorsTb4b4b4[Tb4b4b4(Tffa657intTff7b72.Td2a8fffrom_bytesTb4b4b4(Te6edf3sender_hashTb4b4b4)Tff7b72+Te6edf3shiftTb4b4b4)Tff7b72%Tffa657lenTb4b4b4(Te6edf3nick_colorsTb4b4b4)Tb4b4b4]
Te6edf3room_nick_src_cache Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3mdc Tff7b72= Te6edf3MarkdownToMicronTb4b4b4(Te6edf3max_widthTff7b72=T79c0ff80Tb4b4b4, Te6edf3syntax_highlighterTff7b72=Te6edf3SyntaxHighlighterTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3url_scopeTff7b72=Tff7b72NoneTb4b4b4)
Tff7b72def Td2a8ff_message_widgetTb4b4b4(Te6edf3appTb4b4b4, Te6edf3hubTb4b4b4, Te6edf3mTb4b4b4, Te6edf3link_delegateTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3t Tff7b72= Te6edf3theme_dark Tff7b72if Te6edf3appTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftextuiTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffthemeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3nomadnetTff7b72.Td2a8ffuiTff7b72.Td2a8ffTextUITff7b72.Td2a8ffTHEME_DARK Tff7b72else Te6edf3theme_light
Te6edf3g Tff7b72= Te6edf3appTff7b72.Td2a8ffuiTff7b72.Td2a8ffglyphs
Te6edf3own_nick Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3hub Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3own_nick Tff7b72= Te6edf3hubTff7b72.Td2a8ffget_effective_nickTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3own_nick Tff7b72= Te6edf3appTff7b72.Td2a8ffrrcTff7b72.Td2a8ffget_nicknameTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72if Te6edf3mTff7b72.Td2a8ffkind Tff7b72== Ta5d6ff"Ta5d6ffsystemTa5d6ff"Tb4b4b4:
Te6edf3evt_icon Tff7b72= Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffarrow_lTa5d6ff"Tb4b4b4] Tff7b72if Te6edf3mTff7b72.Td2a8fftextTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff leftTa5d6ff"Tb4b4b4) Tff7b72else Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffarrow_rTa5d6ff"Tb4b4b4]
Te6edf3spansTb4b4b4, Te6edf3has_links Tff7b72= Te6edf3_body_markupTb4b4b4(Te6edf3mTff7b72.Td2a8fftext Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3body_attrTff7b72=Ta5d6ff"Ta5d6ffirc_systemTa5d6ff"Tb4b4b4, Te6edf3own_nickTff7b72=Te6edf3own_nickTb4b4b4)
Te6edf3markup Tff7b72= Tb4b4b4[Te6edf3_ts_prefixTb4b4b4(Te6edf3mTff7b72.Td2a8fftsTb4b4b4)Tb4b4b4, Tb4b4b4(Ta5d6ff"Ta5d6ffirc_systemTa5d6ff"Tb4b4b4, Te6edf3evt_iconTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4] Tff7b72+ Te6edf3spans
Te6edf3final_widget Tff7b72= Te6edf3_wrap_textTb4b4b4(Te6edf3markupTb4b4b4, Te6edf3link_delegate Tff7b72if Te6edf3has_links Tff7b72else Tff7b72NoneTb4b4b4)
Te6edf3final_widgetTff7b72.Td2a8ffmsg Tff7b72= Te6edf3m
Tff7b72return Te6edf3final_widget
Tff7b72if Te6edf3mTff7b72.Td2a8ffkind Tff7b72== Ta5d6ff"Ta5d6ffnoticeTa5d6ff"Tb4b4b4:
Te6edf3spansTb4b4b4, Te6edf3has_links Tff7b72= Te6edf3_body_markupTb4b4b4(Te6edf3mTff7b72.Td2a8fftext Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3body_attrTff7b72=Ta5d6ff"Ta5d6ffirc_noticeTa5d6ff"Tb4b4b4, Te6edf3own_nickTff7b72=Te6edf3own_nickTb4b4b4)
Te6edf3markup Tff7b72= Tb4b4b4[Te6edf3_ts_prefixTb4b4b4(Te6edf3mTff7b72.Td2a8fftsTb4b4b4)Tb4b4b4, Tb4b4b4(Ta5d6ff"Ta5d6ffirc_noticeTa5d6ff"Tb4b4b4, Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffinfoTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4] Tff7b72+ Te6edf3spans
Te6edf3final_widget Tff7b72= Te6edf3_wrap_textTb4b4b4(Te6edf3markupTb4b4b4, Te6edf3link_delegate Tff7b72if Te6edf3has_links Tff7b72else Tff7b72NoneTb4b4b4)
Te6edf3final_widgetTff7b72.Td2a8ffmsg Tff7b72= Te6edf3m
Tff7b72return Te6edf3final_widget
Tff7b72if Te6edf3mTff7b72.Td2a8ffkind Tff7b72== Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4:
Te6edf3spansTb4b4b4, Te6edf3has_links Tff7b72= Te6edf3_body_markupTb4b4b4(Te6edf3mTff7b72.Td2a8fftext Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3body_attrTff7b72=Ta5d6ff"Ta5d6ffirc_errorTa5d6ff"Tb4b4b4, Te6edf3own_nickTff7b72=Te6edf3own_nickTb4b4b4)
Te6edf3markup Tff7b72= Tb4b4b4[Te6edf3_ts_prefixTb4b4b4(Te6edf3mTff7b72.Td2a8fftsTb4b4b4)Tb4b4b4, Tb4b4b4(Ta5d6ff"Ta5d6ffirc_errorTa5d6ff"Tb4b4b4, Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffwarningTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4] Tff7b72+ Te6edf3spans
Te6edf3final_widget Tff7b72= Te6edf3_wrap_textTb4b4b4(Te6edf3markupTb4b4b4, Te6edf3link_delegate Tff7b72if Te6edf3has_links Tff7b72else Tff7b72NoneTb4b4b4)
Te6edf3final_widgetTff7b72.Td2a8ffmsg Tff7b72= Te6edf3m
Tff7b72return Te6edf3final_widget
Te6edf3own Tff7b72= Tff7b72False
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3hub Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3mTff7b72.Td2a8ffsrc Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3appTff7b72.Td2a8ffidentity Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3own Tff7b72= Tffa657bytesTb4b4b4(Te6edf3mTff7b72.Td2a8ffsrcTb4b4b4) Tff7b72== Te6edf3appTff7b72.Td2a8ffidentityTff7b72.Td2a8ffhash
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72if Te6edf3mTff7b72.Td2a8ffnickTb4b4b4: Te6edf3sender Tff7b72= Te6edf3sanitize_nameTb4b4b4(Te6edf3mTff7b72.Td2a8ffnickTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3mTff7b72.Td2a8ffsrcTb4b4b4, Tb4b4b4(Tffa657bytesTb4b4b4, Tffa657bytearrayTb4b4b4)Tb4b4b4)Tb4b4b4: Te6edf3sender Tff7b72= Te6edf3_short_hashTb4b4b4(Te6edf3mTff7b72.Td2a8ffsrcTb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3sender Tff7b72= Ta5d6ff"Ta5d6ff?Ta5d6ff"
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3mTff7b72.Td2a8ffsrcTb4b4b4, Tb4b4b4(Tffa657bytesTb4b4b4, Tffa657bytearrayTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3room_nick_src_cacheTb4b4b4[Te6edf3mTff7b72.Td2a8ffnickTb4b4b4] Tff7b72= Te6edf3mTff7b72.Td2a8ffsrc
Te6edf3nick_attr Tff7b72= Ta5d6ff"Ta5d6ffirc_nick_selfTa5d6ff" Tff7b72if Te6edf3own Tff7b72else Ta5d6ff"Ta5d6ffirc_nick_peerTa5d6ff"
Te6edf3body Tff7b72= Te6edf3mTff7b72.Td2a8fftext Tff7b72or Ta5d6ff"Ta5d6ff"
Te6edf3spansTb4b4b4, Te6edf3has_links Tff7b72= Te6edf3_body_markupTb4b4b4(Te6edf3bodyTb4b4b4, Te6edf3body_attrTff7b72=Ta5d6ff"Ta5d6ffbody_textTa5d6ff"Tb4b4b4, Te6edf3own_nickTff7b72=Tff7b72None Tff7b72if Te6edf3own Tff7b72else Te6edf3own_nickTb4b4b4, Te6edf3check_linksTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3ld Tff7b72= Te6edf3link_delegate Tff7b72if Te6edf3has_links Tff7b72else Tff7b72None
Te6edf3message_body Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72for Te6edf3span Tff7b72in Te6edf3spansTb4b4b4:
Te6edf3ms Tff7b72= Te6edf3spanTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3mb Tff7b72= Te6edf3spanTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3msTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffirc_mentionTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3appTff7b72.Td2a8ffrrc_nick_colorsTb4b4b4: Te6edf3message_body Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff`!`FTffd700{Te6edf3tTb4b4b4[Ta5d6ff'Ta5d6ffmentionTa5d6ff'Tb4b4b4]Tffd700}Tffd700{Te6edf3mbTffd700}Ta5d6ff`f`!Ta5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3message_body Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff`!`FTTffd700{Te6edf3get_nick_colorTb4b4b4(Te6edf3room_nick_src_cacheTb4b4b4[Te6edf3mTff7b72.Td2a8ffnickTb4b4b4]Tb4b4b4, Te6edf3tTb4b4b4, Te6edf3appTb4b4b4)Tffd700}Tffd700{Te6edf3mbTffd700}Ta5d6ff`f`!Ta5d6ff"
Tff7b72exceptTb4b4b4: Te6edf3message_body Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff`!`FTffd700{Te6edf3tTb4b4b4[Ta5d6ff'Ta5d6ffmentionTa5d6ff'Tb4b4b4]Tffd700}Tffd700{Te6edf3mbTffd700}Ta5d6ff`f`!Ta5d6ff"
Tff7b72elif Te6edf3msTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6fflink_Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3kind Tff7b72= Te6edf3msTb4b4b4[Tffa657lenTb4b4b4(Ta5d6ff"Ta5d6fflink_Ta5d6ff"Tb4b4b4)Tb4b4b4:Tb4b4b4]
Te6edf3label Tff7b72= Te6edf3mbTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff`Ta5d6ff"Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3url Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3kindTffd700}Ta5d6ff://Tffd700{Te6edf3mbTffd700}Ta5d6ff"
Te6edf3link_mu Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff`_`FTffd700{Te6edf3tTb4b4b4[Ta5d6ff'Ta5d6fflinkTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff`[Tffd700{Te6edf3labelTffd700}Ta5d6ff`Tffd700{Te6edf3urlTffd700}Ta5d6ff]`f`_Ta5d6ff"
Te6edf3link_md Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff[Tffd700{Te6edf3labelTffd700}Ta5d6ff](Tffd700{Te6edf3urlTffd700}Ta5d6ff)Ta5d6ff"
Te6edf3message_body Tff7b72+Tff7b72= Te6edf3link_mu
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3appTff7b72.Td2a8ffrrc_ui_render_micronTb4b4b4:
Te6edf3mbo Tff7b72= Te6edf3mdcTff7b72.Td2a8ffformat_blockTb4b4b4(Te6edf3mbTb4b4b4) Tff7b72if Te6edf3appTff7b72.Td2a8ffrrc_ui_render_markdown Tff7b72else Te6edf3mb
Te6edf3mbo Tff7b72= Te6edf3unescape_micronTb4b4b4(Te6edf3mboTb4b4b4)
Te6edf3message_body Tff7b72+Tff7b72= Te6edf3strip_non_formatting_tagsTb4b4b4(Te6edf3mboTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3mbo Tff7b72= Te6edf3mdcTff7b72.Td2a8ffformat_blockTb4b4b4(Te6edf3strip_escaped_micronTb4b4b4(Te6edf3mbTb4b4b4)Tb4b4b4) Tff7b72if Te6edf3appTff7b72.Td2a8ffrrc_ui_render_markdown Tff7b72else Te6edf3strip_escaped_micronTb4b4b4(Te6edf3mbTb4b4b4)
Te6edf3message_body Tff7b72+Tff7b72= Te6edf3strip_non_formatting_tagsTb4b4b4(Te6edf3mboTb4b4b4)
Tff7b72if Te6edf3appTff7b72.Td2a8ffrrc_nick_colorsTb4b4b4: Te6edf3nick_attr Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff`FTTffd700{Te6edf3get_nick_colorTb4b4b4(Te6edf3mTff7b72.Td2a8ffsrcTb4b4b4, Te6edf3tTb4b4b4, Te6edf3appTb4b4b4)Tffd700}Ta5d6ff"
Tff7b72elseTb4b4b4: Te6edf3nick_attr Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff`FTffd700{Te6edf3tTb4b4b4[Ta5d6ff'Ta5d6ffnick_selfTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff" Tff7b72if Te6edf3own Tff7b72else Ta5d6fffTa5d6ff"Ta5d6ff`FTffd700{Te6edf3tTb4b4b4[Ta5d6ff'Ta5d6ffnick_peerTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff"
Te6edf3irc_ts Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff`FTffd700{Te6edf3tTb4b4b4[Ta5d6ff'Ta5d6fftsTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff"
Te6edf3prefix_micron Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3irc_tsTffd700}Tffd700{Te6edf3_ts_prefix_rawTb4b4b4(Te6edf3mTff7b72.Td2a8fftsTb4b4b4)Tffd700}Ta5d6ff"
Te6edf3nick_micron Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff`fTffd700{Te6edf3nick_attrTffd700}Ta5d6ff<Tffd700{Te6edf3senderTffd700}Ta5d6ff>`f Ta5d6ff"
Tff7b72if Te6edf3appTff7b72.Td2a8ffrrc_ui_justify_msgsTb4b4b4:
Te6edf3prefix_rendered Tff7b72= Te6edf3_render_bodyTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3prefix_micronTffd700}Ta5d6ff"Tb4b4b4, Te6edf3fgTff7b72=Te6edf3tTb4b4b4[Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3body_rendered Tff7b72= Te6edf3_render_bodyTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3nick_micronTffd700}Tffd700{Te6edf3message_bodyTffd700}Ta5d6ff"Tb4b4b4, Te6edf3link_delegateTff7b72=Te6edf3ldTb4b4b4, Te6edf3fgTff7b72=Te6edf3tTb4b4b4[Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3appTff7b72.Td2a8ffrrc_ui_space_msgsTb4b4b4: Te6edf3body_renderedTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3columns Tff7b72= Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffPACKTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Te6edf3prefix_renderedTb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Te6edf3body_renderedTb4b4b4)Tb4b4b4]Tb4b4b4, Te6edf3dividecharsTff7b72=T79c0ff1Tb4b4b4)
Te6edf3final_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPaddingTb4b4b4(Te6edf3columnsTb4b4b4, Te6edf3leftTff7b72=T79c0ff1Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3rendered Tff7b72= Te6edf3_render_bodyTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3prefix_micronTffd700}Tffd700{Te6edf3nick_micronTffd700}Tffd700{Te6edf3message_bodyTffd700}Ta5d6ff"Tb4b4b4, Te6edf3link_delegateTff7b72=Te6edf3ldTb4b4b4, Te6edf3fgTff7b72=Te6edf3tTb4b4b4[Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3appTff7b72.Td2a8ffrrc_ui_space_msgsTb4b4b4: Te6edf3renderedTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3final_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPaddingTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Te6edf3renderedTb4b4b4)Tb4b4b4, Te6edf3leftTff7b72=T79c0ff1Tb4b4b4)
Te6edf3final_widgetTff7b72.Td2a8ffmsg Tff7b72= Te6edf3m
Tff7b72return Te6edf3final_widget
Tff7b72def Td2a8ff_render_bodyTb4b4b4(Te6edf3markupTb4b4b4, Te6edf3link_delegateTff7b72=Tff7b72NoneTb4b4b4, Te6edf3fgTff7b72=Ta5d6ff"Ta5d6ffbbbTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4: Tff7b72return Te6edf3markup_to_attrmapsTb4b4b4(Te6edf3strip_modifiersTb4b4b4(Te6edf3markupTb4b4b4)Tb4b4b4, Te6edf3url_delegateTff7b72=Te6edf3link_delegateTb4b4b4, Te6edf3link_classTff7b72=Te6edf3_ChatLinkableTextTb4b4b4, Te6edf3fg_colorTff7b72=Te6edf3fgTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ff_wrap_textTb4b4b4(Te6edf3markupTb4b4b4, Te6edf3link_delegateTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3link_delegate Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3_ChatLinkableTextTb4b4b4(Te6edf3markupTb4b4b4, Te6edf3alignTff7b72=Ta5d6ff"Ta5d6ffleftTa5d6ff"Tb4b4b4, Te6edf3delegateTff7b72=Te6edf3link_delegateTb4b4b4)
Tff7b72return Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Te6edf3markupTb4b4b4)
Tff7b72class T56d364ChannelsDisplayTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3list_width Tff7b72= T79c0ff0.33
Te6edf3given_list_width Tff7b72= T79c0ff36
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffdialog_open Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fflist_widgets Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffselected_key Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffcurrent_room_widget Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffusers_visible Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffchannel_list_visible Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffcollapse_join_part Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ff_build_listboxTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffgutter Tff7b72= Te6edf3ChannelsExpandGutterTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffshow_gutters Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrc_show_gutters
Tff7b72selfTff7b72.Td2a8fflist_shortcuts Tff7b72= Te6edf3ChannelsListShortcutsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffroom_shortcuts Tff7b72= Te6edf3ChannelsRoomShortcutsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffshortcuts_display Tff7b72= Tff7b72selfTff7b72.Td2a8fflist_shortcuts
Tff7b72selfTff7b72.Td2a8ffplaceholder Tff7b72= Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff Select or add a hub to beginTa5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fftopTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffright Tff7b72= Tff7b72selfTff7b72.Td2a8ffplaceholder
Tff7b72selfTff7b72.Td2a8ffcolumns_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(
Tb4b4b4[
Tb4b4b4(Te6edf3ChannelsDisplayTff7b72.Td2a8ffgiven_list_widthTb4b4b4, Tff7b72selfTff7b72.Td2a8fflistboxTb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff1Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrightTb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Te6edf3dividecharsTff7b72=T79c0ff0Tb4b4b4, Te6edf3focus_columnTff7b72=T79c0ff0Tb4b4b4, Te6edf3box_columnsTff7b72=Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffWidgetPlaceholderTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_pending_actions Tff7b72= Te6edf3collectionsTff7b72.Td2a8ffdequeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_wake_fd Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_wake_fd Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffloopTff7b72.Td2a8ffwatch_pipeTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_process_pendingTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ff_mention_bell_last Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8ffset_change_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_on_rrc_changeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8ffset_message_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_on_rrc_messageTb4b4b4)
Tff7b72def Td2a8ff_set_right_widgetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffright Tff7b72= Te6edf3widget
Tff7b72selfTff7b72.Td2a8ff_apply_channel_list_visibilityTb4b4b4(Te6edf3focus_rightTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftoggle_channel_listTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffchannel_list_visible Tff7b72and Tff7b72selfTff7b72.Td2a8ffright Tff7b72is Tff7b72selfTff7b72.Td2a8ffplaceholderTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffchannel_list_visible Tff7b72= Tff7b72not Tff7b72selfTff7b72.Td2a8ffchannel_list_visible
Tff7b72selfTff7b72.Td2a8ff_apply_channel_list_visibilityTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftoggle_join_part_collapseTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcollapse_join_part Tff7b72= Tff7b72not Tff7b72selfTff7b72.Td2a8ffcollapse_join_part
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcurrent_room_widget Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcurrent_room_widgetTff7b72.Td2a8ffupdate_messagesTb4b4b4(Te6edf3replaceTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ff_apply_channel_list_visibilityTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3focus_rightTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3list_opts Tff7b72= Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffGIVENTb4b4b4, Te6edf3ChannelsDisplayTff7b72.Td2a8ffgiven_list_widthTb4b4b4)
Te6edf3gutter_opts Tff7b72= Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffGIVENTb4b4b4, T79c0ff1Tb4b4b4)
Te6edf3right_opts Tff7b72= Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffchannel_list_visibleTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8ffcontents Tff7b72= Tb4b4b4[
Tb4b4b4(Tff7b72selfTff7b72.Td2a8fflistboxTb4b4b4, Te6edf3list_optsTb4b4b4)Tb4b4b4,
Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffrightTb4b4b4, Te6edf3right_optsTb4b4b4)Tb4b4b4,
Tb4b4b4]
Tff7b72if Te6edf3focus_rightTb4b4b4:
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8fffocus_position Tff7b72= T79c0ff1
Tff7b72except Tf85149ExceptionTb4b4b4: Tff7b72pass
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffshow_guttersTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8ffcontents Tff7b72= Tb4b4b4[
Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffgutterTb4b4b4, Te6edf3gutter_optsTb4b4b4)Tb4b4b4,
Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffrightTb4b4b4, Te6edf3right_optsTb4b4b4)Tb4b4b4,
Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8ffcontents Tff7b72= Tb4b4b4[
Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffrightTb4b4b4, Te6edf3right_optsTb4b4b4)Tb4b4b4,
Tb4b4b4]
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8fffocus_position Tff7b72= T79c0ff1
Tff7b72except Tf85149ExceptionTb4b4b4: Tff7b72pass
Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffshortcutsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3focus_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8ffget_focus_pathTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3focus_path Tff7b72= Tff7b72None
Tff7b72if Te6edf3focus_path Tff7b72and Te6edf3focus_pathTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== T79c0ff1 Tff7b72and Tff7b72selfTff7b72.Td2a8ffcurrent_room_widget Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffroom_shortcuts
Tff7b72return Tff7b72selfTff7b72.Td2a8fflist_shortcuts
Tff7b72def Td2a8ff_build_listboxTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_compose_list_widgetsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffilb Tff7b72= Te6edf3IndicativeListBoxTb4b4b4(
Tff7b72selfTff7b72.Td2a8fflist_widgetsTb4b4b4,
Te6edf3on_selection_changeTff7b72=Tff7b72lambda Te6edf3aTb4b4b4, Te6edf3bTb4b4b4: Tff7b72NoneTb4b4b4,
Te6edf3initialization_is_selection_changeTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3highlight_offFocusTff7b72=Ta5d6ff"Ta5d6fflist_off_focusTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflistbox Tff7b72= Te6edf3ChannelsListAreaTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffilbTb4b4b4, Te6edf3heightTff7b72=Te6edf3urwidTff7b72.Td2a8ffRELATIVE_100Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffChannelsTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflistboxTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72def Td2a8ff_compose_list_widgetsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3widgets Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3manager Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrc
Tff7b72if Tff7b72not Te6edf3managerTff7b72.Td2a8ffhubsTb4b4b4:
Te6edf3entry Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff No hubs yet. Press Ctrl-N to add one.Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"Tb4b4b4)
Te6edf3widgetsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3entryTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflist_widgets Tff7b72= Te6edf3widgets
Tff7b72return
Te6edf3g Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffglyphs
Tff7b72for Te6edf3hub_idxTb4b4b4, Te6edf3hub Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3managerTff7b72.Td2a8ffhubsTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3hub_idx Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3spacer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3spacerTff7b72.Td2a8ffrow_kind Tff7b72= Ta5d6ff"Ta5d6ffspacerTa5d6ff"
Te6edf3widgetsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3spacerTb4b4b4)
Tff7b72if Te6edf3hubTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTEDTb4b4b4:
Te6edf3status_glyph Tff7b72= Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffcheckTa5d6ff"Tb4b4b4]
Te6edf3style Tff7b72= Ta5d6ff"Ta5d6fflist_trustedTa5d6ff"
Tff7b72elif Te6edf3hubTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTINGTb4b4b4:
Te6edf3status_glyph Tff7b72= Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffinfoTa5d6ff"Tb4b4b4]
Te6edf3style Tff7b72= Ta5d6ff"Ta5d6fflist_unresponsiveTa5d6ff"
Tff7b72elif Te6edf3hubTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_FAILEDTb4b4b4:
Te6edf3status_glyph Tff7b72= Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffcrossTa5d6ff"Tb4b4b4]
Te6edf3style Tff7b72= Ta5d6ff"Ta5d6fflist_untrustedTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3status_glyph Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"
Te6edf3style Tff7b72= Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"
Te6edf3entry Tff7b72= Te6edf3ChannelListEntryTb4b4b4(Te6edf3status_glyphTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3hubTff7b72.Td2a8ffnameTb4b4b4)
Te6edf3urwidTff7b72.Td2a8ffconnect_signalTb4b4b4(Te6edf3entryTb4b4b4, Ta5d6ff"Ta5d6ffclickTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_select_hubTb4b4b4, Te6edf3hubTb4b4b4)
Te6edf3attr Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3entryTb4b4b4, Te6edf3styleTb4b4b4, Ta5d6ff"Ta5d6fflist_focusTa5d6ff"Tb4b4b4)
Te6edf3attrTff7b72.Td2a8ffrow_kind Tff7b72= Ta5d6ff"Ta5d6ffhubTa5d6ff"
Te6edf3attrTff7b72.Td2a8ffhub Tff7b72= Te6edf3hub
Te6edf3attrTff7b72.Td2a8ffroom Tff7b72= Tff7b72None
Te6edf3widgetsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3attrTb4b4b4)
Tff7b72for Te6edf3room Tff7b72in Tffa657sortedTb4b4b4(Tffa657listTb4b4b4(Te6edf3hubTff7b72.Td2a8ffrooms Tff7b72| Tffa657setTb4b4b4(Te6edf3hubTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffkeysTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3roomTb4b4b4:
Tff7b72continue
Te6edf3is_joined Tff7b72= Te6edf3room Tff7b72in Te6edf3hubTff7b72.Td2a8ffrooms
Te6edf3mentioned Tff7b72= Te6edf3room Tff7b72in Te6edf3hubTff7b72.Td2a8ffmention_rooms
Te6edf3unread Tff7b72= Te6edf3room Tff7b72in Te6edf3hubTff7b72.Td2a8ffunread_rooms
Tff7b72if Te6edf3mentionedTb4b4b4:
Te6edf3marker Tff7b72= Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffwarningTa5d6ff"Tb4b4b4]
Te6edf3room_style Tff7b72= Ta5d6ff"Ta5d6ffirc_mentionTa5d6ff"
Tff7b72elif Te6edf3unreadTb4b4b4:
Te6edf3marker Tff7b72= Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffunreadTa5d6ff"Tb4b4b4]
Te6edf3room_style Tff7b72= Ta5d6ff"Ta5d6fflist_unresponsiveTa5d6ff"
Tff7b72elif Tff7b72not Te6edf3is_joinedTb4b4b4:
Te6edf3marker Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"
Te6edf3room_style Tff7b72= Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3marker Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"
Te6edf3room_style Tff7b72= Ta5d6ff"Ta5d6fflist_trustedTa5d6ff" Tff7b72if Te6edf3hubTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTED Tff7b72else Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"
Te6edf3room_entry Tff7b72= Te6edf3ChannelListEntryTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3markerTff7b72+Ta5d6ff"Ta5d6ff #Ta5d6ff"Tff7b72+Te6edf3roomTb4b4b4)
Te6edf3urwidTff7b72.Td2a8ffconnect_signalTb4b4b4(Te6edf3room_entryTb4b4b4, Ta5d6ff"Ta5d6ffclickTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_select_roomTb4b4b4, Tb4b4b4(Te6edf3hubTb4b4b4, Te6edf3roomTb4b4b4)Tb4b4b4)
Te6edf3room_attr Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3room_entryTb4b4b4, Te6edf3room_styleTb4b4b4, Ta5d6ff"Ta5d6fflist_focusTa5d6ff"Tb4b4b4)
Te6edf3room_attrTff7b72.Td2a8ffrow_kind Tff7b72= Ta5d6ff"Ta5d6ffroomTa5d6ff"
Te6edf3room_attrTff7b72.Td2a8ffhub Tff7b72= Te6edf3hub
Te6edf3room_attrTff7b72.Td2a8ffroom Tff7b72= Te6edf3room
Te6edf3widgetsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3room_attrTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflist_widgets Tff7b72= Te6edf3widgets
Tff7b72def Td2a8ffupdate_listTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3prev_key Tff7b72= Tff7b72selfTff7b72.Td2a8ffselected_key
Tff7b72selfTff7b72.Td2a8ff_compose_list_widgetsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffilb Tff7b72= Te6edf3IndicativeListBoxTb4b4b4(
Tff7b72selfTff7b72.Td2a8fflist_widgetsTb4b4b4,
Te6edf3on_selection_changeTff7b72=Tff7b72lambda Te6edf3aTb4b4b4, Te6edf3bTb4b4b4: Tff7b72NoneTb4b4b4,
Te6edf3initialization_is_selection_changeTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3highlight_offFocusTff7b72=Ta5d6ff"Ta5d6fflist_off_focusTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflistbox Tff7b72= Te6edf3ChannelsListAreaTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffilbTb4b4b4, Te6edf3heightTff7b72=Te6edf3urwidTff7b72.Td2a8ffRELATIVE_100Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffChannelsTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflistboxTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffdialog_open Tff7b72and Tff7b72selfTff7b72.Td2a8ffchannel_list_visibleTb4b4b4:
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffGIVENTb4b4b4, Te6edf3ChannelsDisplayTff7b72.Td2a8ffgiven_list_widthTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8fflistboxTb4b4b4, Te6edf3optionsTb4b4b4)
Tff7b72if Te6edf3prev_key Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72for Te6edf3idxTb4b4b4, Te6edf3w Tff7b72in Tffa657enumerateTb4b4b4(Tff7b72selfTff7b72.Td2a8fflist_widgetsTb4b4b4)Tb4b4b4:
Te6edf3key Tff7b72= Tff7b72selfTff7b72.Td2a8ff_row_keyTb4b4b4(Te6edf3wTb4b4b4)
Tff7b72if Te6edf3key Tff7b72== Te6edf3prev_keyTb4b4b4:
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffilbTff7b72.Td2a8ffselect_itemTb4b4b4(Te6edf3idxTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4: Tff7b72pass
Tff7b72break
Tff7b72selfTff7b72.Td2a8ff_refresh_active_headerTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffloopTff7b72.Td2a8ffdraw_screenTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ff_row_keyTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3wTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ffrow_kindTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72if Te6edf3wTff7b72.Td2a8ffrow_kind Tff7b72== Ta5d6ff"Ta5d6ffhubTa5d6ff"Tb4b4b4:
Tff7b72return Tb4b4b4(Ta5d6ff"Ta5d6ffhubTa5d6ff"Tb4b4b4, Te6edf3wTff7b72.Td2a8ffhubTff7b72.Td2a8ffhub_hashTb4b4b4, Te6edf3wTff7b72.Td2a8ffhubTff7b72.Td2a8ffdest_nameTb4b4b4)
Tff7b72if Te6edf3wTff7b72.Td2a8ffrow_kind Tff7b72== Ta5d6ff"Ta5d6ffroomTa5d6ff"Tb4b4b4:
Tff7b72return Tb4b4b4(Ta5d6ff"Ta5d6ffroomTa5d6ff"Tb4b4b4, Te6edf3wTff7b72.Td2a8ffhubTff7b72.Td2a8ffhub_hashTb4b4b4, Te6edf3wTff7b72.Td2a8ffhubTff7b72.Td2a8ffdest_nameTb4b4b4, Te6edf3wTff7b72.Td2a8ffroomTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff_refresh_active_headerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcurrent_room_widget Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcurrent_room_widgetTff7b72.Td2a8ff_update_peer_infoTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72return
Tff7b72if Tff7b72selfTff7b72.Td2a8ffselected_key Tff7b72and Tff7b72selfTff7b72.Td2a8ffselected_keyTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffhubTa5d6ff"Tb4b4b4:
Tff7b72for Te6edf3h Tff7b72in Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8ffhubsTb4b4b4:
Tff7b72if Te6edf3hTff7b72.Td2a8ffhub_hash Tff7b72== Tff7b72selfTff7b72.Td2a8ffselected_keyTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72and Te6edf3hTff7b72.Td2a8ffdest_name Tff7b72== Tff7b72selfTff7b72.Td2a8ffselected_keyTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_show_hub_infoTb4b4b4(Te6edf3hTb4b4b4)
Tff7b72break
Tff7b72def Td2a8ff_select_hubTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4, Te6edf3hubTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffselected_key Tff7b72= Tb4b4b4(Ta5d6ff"Ta5d6ffhubTa5d6ff"Tb4b4b4, Te6edf3hubTff7b72.Td2a8ffhub_hashTb4b4b4, Te6edf3hubTff7b72.Td2a8ffdest_nameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8ffset_activeTb4b4b4(Te6edf3hubTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_maybe_autoconnectTb4b4b4(Te6edf3hubTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_show_hub_infoTb4b4b4(Te6edf3hubTb4b4b4)
Tff7b72def Td2a8ff_select_roomTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4, Te6edf3payloadTb4b4b4)Tb4b4b4:
Te6edf3hubTb4b4b4, Te6edf3room Tff7b72= Te6edf3payload
Tff7b72selfTff7b72.Td2a8ffselected_key Tff7b72= Tb4b4b4(Ta5d6ff"Ta5d6ffroomTa5d6ff"Tb4b4b4, Te6edf3hubTff7b72.Td2a8ffhub_hashTb4b4b4, Te6edf3hubTff7b72.Td2a8ffdest_nameTb4b4b4, Te6edf3roomTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8ffset_activeTb4b4b4(Te6edf3hubTb4b4b4, Te6edf3roomTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_maybe_autoconnectTb4b4b4(Te6edf3hubTb4b4b4)
Tff7b72if Te6edf3room Tff7b72not Tff7b72in Te6edf3hubTff7b72.Td2a8ffroomsTb4b4b4:
Tff7b72if Te6edf3hubTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTEDTb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3hubTff7b72.Td2a8ffjoin_roomTb4b4b4(Te6edf3roomTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAuto-join failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3hubTff7b72.Td2a8ffadd_roomTb4b4b4(Te6edf3roomTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPending join queue failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_show_roomTb4b4b4(Te6edf3hubTb4b4b4, Te6edf3roomTb4b4b4)
Tff7b72def Td2a8ff_maybe_autoconnectTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hubTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3hubTff7b72.Td2a8ffstatus Tff7b72in Tb4b4b4(Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_DISCONNECTEDTb4b4b4, Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_FAILEDTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3hubTff7b72.Td2a8ffconnectTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAuto-connect failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ff_show_hub_infoTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hubTb4b4b4)Tb4b4b4:
Te6edf3g Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffglyphs
Te6edf3status_label Tff7b72= Tb4b4b4{
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_DISCONNECTEDTb4b4b4: Ta5d6ff"Ta5d6ffDisconnectedTa5d6ff"Tb4b4b4,
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTINGTb4b4b4: Ta5d6ff"Ta5d6ffConnectingTa5d6ff"Tb4b4b4,
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTEDTb4b4b4: Ta5d6ff"Ta5d6ffConnectedTa5d6ff"Tb4b4b4,
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_FAILEDTb4b4b4: Ta5d6ff"Ta5d6ffFailedTa5d6ff"Tb4b4b4,
Tb4b4b4}Tff7b72.Td2a8ffgetTb4b4b4(Te6edf3hubTff7b72.Td2a8ffstatusTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3status_attr Tff7b72= Tb4b4b4{
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_DISCONNECTEDTb4b4b4: Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"Tb4b4b4,
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTINGTb4b4b4: Ta5d6ff"Ta5d6fflist_unresponsiveTa5d6ff"Tb4b4b4,
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTEDTb4b4b4: Ta5d6ff"Ta5d6ffconnected_statusTa5d6ff"Tb4b4b4,
Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_FAILEDTb4b4b4: Ta5d6ff"Ta5d6fflist_untrustedTa5d6ff"Tb4b4b4,
Tb4b4b4}Tff7b72.Td2a8ffgetTb4b4b4(Te6edf3hubTff7b72.Td2a8ffstatusTb4b4b4, Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"Tb4b4b4)
Te6edf3lines Tff7b72= Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Hub : Ta5d6ff"Tff7b72+Te6edf3hubTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Address : Ta5d6ff"Tff7b72+Te6edf3hubTff7b72.Td2a8ffhub_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Status : Ta5d6ff"Tff7b72+Te6edf3status_labelTff7b72+Ta5d6ff"Ta5d6ff (Ta5d6ff"Tff7b72+Te6edf3hubTff7b72.Td2a8ffstatus_textTff7b72+Ta5d6ff"Ta5d6ff)Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3status_attrTb4b4b4)Tb4b4b4,
Tb4b4b4]
Tff7b72if Te6edf3hubTff7b72.Td2a8ffhub_nameTb4b4b4:
Te6edf3ver Tff7b72= Ta5d6ff"Ta5d6ff vTa5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3hubTff7b72.Td2a8ffhub_versionTb4b4b4) Tff7b72if Te6edf3hubTff7b72.Td2a8ffhub_version Tff7b72else Ta5d6ff"Ta5d6ff"
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Server : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3hubTff7b72.Td2a8ffhub_nameTb4b4b4)Tff7b72+Te6edf3verTb4b4b4)Tb4b4b4)
Te6edf3ar_glyph Tff7b72= Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffcheckTa5d6ff"Tb4b4b4] Tff7b72if Te6edf3hubTff7b72.Td2a8ffauto_reconnect Tff7b72else Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffcrossTa5d6ff"Tb4b4b4]
Te6edf3ar_attr Tff7b72= Ta5d6ff"Ta5d6fflist_trustedTa5d6ff" Tff7b72if Te6edf3hubTff7b72.Td2a8ffauto_reconnect Tff7b72else Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"
Te6edf3ar_text Tff7b72= Ta5d6ff"Ta5d6ffOnTa5d6ff" Tff7b72if Te6edf3hubTff7b72.Td2a8ffauto_reconnect Tff7b72else Ta5d6ff"Ta5d6ffOffTa5d6ff"
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff AutoRcn : Ta5d6ff"Tff7b72+Te6edf3ar_glyphTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3ar_textTff7b72+Ta5d6ff"Ta5d6ff (Ctrl-T to toggle)Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3ar_attrTb4b4b4)Tb4b4b4)
Te6edf3al_glyph Tff7b72= Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffcheckTa5d6ff"Tb4b4b4] Tff7b72if Te6edf3hubTff7b72.Td2a8ffauto_list Tff7b72else Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffcrossTa5d6ff"Tb4b4b4]
Te6edf3al_attr Tff7b72= Ta5d6ff"Ta5d6fflist_trustedTa5d6ff" Tff7b72if Te6edf3hubTff7b72.Td2a8ffauto_list Tff7b72else Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"
Te6edf3al_text Tff7b72= Ta5d6ff"Ta5d6ffOnTa5d6ff" Tff7b72if Te6edf3hubTff7b72.Td2a8ffauto_list Tff7b72else Ta5d6ff"Ta5d6ffOffTa5d6ff"
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff AutoList : Ta5d6ff"Tff7b72+Te6edf3al_glyphTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3al_textTff7b72+Ta5d6ff"Ta5d6ff (Ctrl-E to edit)Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3al_attrTb4b4b4)Tb4b4b4)
Te6edf3aw_glyph Tff7b72= Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffcheckTa5d6ff"Tb4b4b4] Tff7b72if Te6edf3hubTff7b72.Td2a8ffauto_who Tff7b72else Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffcrossTa5d6ff"Tb4b4b4]
Te6edf3aw_attr Tff7b72= Ta5d6ff"Ta5d6fflist_trustedTa5d6ff" Tff7b72if Te6edf3hubTff7b72.Td2a8ffauto_who Tff7b72else Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"
Te6edf3aw_text Tff7b72= Ta5d6ff"Ta5d6ffOnTa5d6ff" Tff7b72if Te6edf3hubTff7b72.Td2a8ffauto_who Tff7b72else Ta5d6ff"Ta5d6ffOffTa5d6ff"
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff AutoWho : Ta5d6ff"Tff7b72+Te6edf3aw_glyphTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3aw_textTff7b72+Ta5d6ff"Ta5d6ff (Ctrl-E to edit)Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3aw_attrTb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3hubTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTEDTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Connected. Use Ctrl-A to add a room.Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3hubTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTINGTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Connecting...Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fflist_unresponsiveTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Use Ctrl-R to connect.Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3hubTff7b72.Td2a8ffmotdTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff MOTD:Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3motd_delegate Tff7b72= Te6edf3_ChatLinkDelegateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hubTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3motd_widgets Tff7b72= Te6edf3markup_to_attrmapsTb4b4b4(Te6edf3_linkify_motdTb4b4b4(Te6edf3hubTff7b72.Td2a8ffmotdTb4b4b4)Tb4b4b4, Te6edf3url_delegateTff7b72=Te6edf3motd_delegateTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3motd_widgets Tff7b72= Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Te6edf3hubTff7b72.Td2a8ffmotdTb4b4b4)Tb4b4b4]
Tff7b72for Te6edf3w Tff7b72in Te6edf3motd_widgetsTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffPaddingTb4b4b4(Te6edf3wTb4b4b4, Te6edf3leftTff7b72=T79c0ff2Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3hubTff7b72.Td2a8ffroomsTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Joined rooms:Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3r Tff7b72in Tffa657sortedTb4b4b4(Te6edf3hubTff7b72.Td2a8ffroomsTb4b4b4)Tb4b4b4:
Te6edf3entry Tff7b72= Te6edf3ChannelListEntryTb4b4b4(Ta5d6ff"Ta5d6ff #Ta5d6ff"Tff7b72+Te6edf3rTb4b4b4)
Te6edf3urwidTff7b72.Td2a8ffconnect_signalTb4b4b4(Te6edf3entryTb4b4b4, Ta5d6ff"Ta5d6ffclickTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_select_roomTb4b4b4, Tb4b4b4(Te6edf3hubTb4b4b4, Te6edf3rTb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3entryTb4b4b4, Ta5d6ff"Ta5d6fflist_trustedTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflist_focusTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3available Tff7b72= Tffa657sortedTb4b4b4(
Tb4b4b4(Te6edf3nameTb4b4b4, Te6edf3topicTb4b4b4) Tff7b72for Te6edf3nameTb4b4b4, Te6edf3topic Tff7b72in Te6edf3hubTff7b72.Td2a8ffavailable_roomsTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3name Tff7b72and Te6edf3name Tff7b72not Tff7b72in Te6edf3hubTff7b72.Td2a8ffrooms
Tb4b4b4)
Tff7b72if Te6edf3availableTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Available rooms:Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3nameTb4b4b4, Te6edf3topic Tff7b72in Te6edf3availableTb4b4b4:
Te6edf3label Tff7b72= Ta5d6ff"Ta5d6ff #Ta5d6ff"Tff7b72+Te6edf3name
Tff7b72if Te6edf3topicTb4b4b4:
Te6edf3label Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3gTb4b4b4[Ta5d6ff"Ta5d6ffarrow_rTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3topic
Te6edf3entry Tff7b72= Te6edf3ChannelListEntryTb4b4b4(Te6edf3labelTb4b4b4)
Te6edf3urwidTff7b72.Td2a8ffconnect_signalTb4b4b4(Te6edf3entryTb4b4b4, Ta5d6ff"Ta5d6ffclickTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_select_roomTb4b4b4, Tb4b4b4(Te6edf3hubTb4b4b4, Te6edf3nameTb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3entryTb4b4b4, Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflist_focusTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3body Tff7b72= Te6edf3ScrollBarTb4b4b4(Te6edf3ScrollableTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Te6edf3linesTb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3thumb_charTff7b72=Ta5d6ff"Ta5d6ff┃Ta5d6ff"Tb4b4b4, Te6edf3trough_charTff7b72=Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)
Te6edf3info Tff7b72= Te6edf3HubInfoAreaTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3bodyTb4b4b4, Ta5d6ff"Ta5d6ffscrollbarTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Te6edf3hubTff7b72.Td2a8ffnameTb4b4b4)
Te6edf3infoTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffcurrent_room_widget Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_set_right_widgetTb4b4b4(Te6edf3infoTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffshortcuts_display Tff7b72= Tff7b72selfTff7b72.Td2a8fflist_shortcuts
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffupdate_active_shortcutsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffshow_placeholderTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcurrent_room_widget Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffselected_key Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_set_right_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffplaceholderTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffshortcuts_display Tff7b72= Tff7b72selfTff7b72.Td2a8fflist_shortcuts
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffupdate_active_shortcutsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_show_roomTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hubTb4b4b4, Te6edf3roomTb4b4b4)Tb4b4b4:
Te6edf3widget Tff7b72= Te6edf3RoomWidgetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hubTb4b4b4, Te6edf3roomTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcurrent_room_widget Tff7b72= Te6edf3widget
Tff7b72selfTff7b72.Td2a8ff_set_right_widgetTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8fffocus_position Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTff7b72.Td2a8ffcontentsTb4b4b4)Tff7b72-T79c0ff1
Tff7b72selfTff7b72.Td2a8ffshortcuts_display Tff7b72= Tff7b72selfTff7b72.Td2a8ffroom_shortcuts
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffupdate_active_shortcutsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_selected_rowTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3item Tff7b72= Tff7b72selfTff7b72.Td2a8ffilbTff7b72.Td2a8ffget_selected_itemTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3item Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Te6edf3item
Tff7b72def Td2a8ffconnect_selectedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3item Tff7b72= Tff7b72selfTff7b72.Td2a8ff_selected_rowTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3item Tff7b72is Tff7b72None Tff7b72or Tff7b72not Tffa657hasattrTb4b4b4(Te6edf3itemTb4b4b4, Ta5d6ff"Ta5d6ffhubTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Te6edf3itemTff7b72.Td2a8ffhubTff7b72.Td2a8ffconnectTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffConnect failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffdisconnect_selectedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3item Tff7b72= Tff7b72selfTff7b72.Td2a8ff_selected_rowTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3item Tff7b72is Tff7b72None Tff7b72or Tff7b72not Tffa657hasattrTb4b4b4(Te6edf3itemTb4b4b4, Ta5d6ff"Ta5d6ffhubTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Te6edf3itemTff7b72.Td2a8ffhubTff7b72.Td2a8ffdisconnectTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8fftoggle_auto_reconnect_selectedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3item Tff7b72= Tff7b72selfTff7b72.Td2a8ff_selected_rowTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3item Tff7b72is Tff7b72None Tff7b72or Tff7b72not Tffa657hasattrTb4b4b4(Te6edf3itemTb4b4b4, Ta5d6ff"Ta5d6ffhubTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3itemTff7b72.Td2a8ffhubTff7b72.Td2a8ffset_auto_reconnectTb4b4b4(Tff7b72not Te6edf3itemTff7b72.Td2a8ffhubTff7b72.Td2a8ffauto_reconnectTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcurrent_room_widget Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_show_hub_infoTb4b4b4(Te6edf3itemTff7b72.Td2a8ffhubTb4b4b4)
Tff7b72def Td2a8ffremove_selected_dialogTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3item Tff7b72= Tff7b72selfTff7b72.Td2a8ff_selected_rowTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3item Tff7b72is Tff7b72None Tff7b72or Tff7b72not Tffa657hasattrTb4b4b4(Te6edf3itemTb4b4b4, Ta5d6ff"Ta5d6ffhubTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3hub Tff7b72= Te6edf3itemTff7b72.Td2a8ffhub
Te6edf3room Tff7b72= Tffa657getattrTb4b4b4(Te6edf3itemTb4b4b4, Ta5d6ff"Ta5d6ffroomTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72def Td2a8ffconfirmedTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3room Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3hubTff7b72.Td2a8ffpart_roomTb4b4b4(Te6edf3roomTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4: Tff7b72pass
Te6edf3hubTff7b72.Td2a8ffremove_roomTb4b4b4(Te6edf3roomTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8ffremove_hubTb4b4b4(Te6edf3hubTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffshow_placeholderTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffdismissTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3room Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3prompt Tff7b72= Ta5d6ff"Ta5d6ffLeave and remove roomTffea00\nTa5d6ff#Ta5d6ff"Tff7b72+Te6edf3roomTff7b72+Ta5d6ff"Tffea00\nTa5d6ffon hub Ta5d6ff"Tff7b72+Te6edf3hubTff7b72.Td2a8ffnameTff7b72+Ta5d6ff"Ta5d6ff?Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3prompt Tff7b72= Ta5d6ff"Ta5d6ffRemove hubTffea00\nTa5d6ff"Tff7b72+Te6edf3hubTff7b72.Td2a8ffnameTff7b72+Ta5d6ff"Tffea00\nTa5d6fffrom this client?Tffea00\nTa5d6ff All Message history will be discarded.Ta5d6ff"
Te6edf3dialog Tff7b72= Te6edf3ChannelsDialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Te6edf3promptTff7b72+Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffYesTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3confirmedTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffNoTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3dismissTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ff?Ta5d6ff"
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ff_show_dialog_overlayTb4b4b4(Te6edf3dialogTb4b4b4)
Tff7b72def Td2a8ffnew_hub_dialogTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3e_hash Tff7b72= Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4(Te6edf3captionTff7b72=Ta5d6ff"Ta5d6ffHub address : Ta5d6ff"Tb4b4b4, Te6edf3edit_textTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3e_name Tff7b72= Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4(Te6edf3captionTff7b72=Ta5d6ff"Ta5d6ffDisplay name: Ta5d6ff"Tb4b4b4, Te6edf3edit_textTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3error_text Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffdismissTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffconfirmedTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3hh_text Tff7b72= Te6edf3e_hashTff7b72.Td2a8ffget_edit_textTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3hh_textTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff0xTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3hh_text Tff7b72= Te6edf3hh_textTb4b4b4[T79c0ff2Tb4b4b4:Tb4b4b4]
Te6edf3hh Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3hh_textTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3hhTb4b4b4) Tff7b72!= Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffHash length must be Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bytesTa5d6ff"Tb4b4b4)
Te6edf3nm Tff7b72= Te6edf3e_nameTff7b72.Td2a8ffget_edit_textTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Tff7b72None
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8ffadd_hubTb4b4b4(Te6edf3hhTb4b4b4, Te6edf3nameTff7b72=Te6edf3nmTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3error_textTff7b72.Td2a8ffset_textTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6fferror_textTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCould not add hub: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3ChannelsDialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3e_hashTb4b4b4,
Te6edf3e_nameTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3error_textTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffAddTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3confirmedTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffBackTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3dismissTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffNew HubTa5d6ff"
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ff_show_dialog_overlayTb4b4b4(Te6edf3dialogTb4b4b4)
Tff7b72def Td2a8ffconfirm_new_hub_dialogTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hub_hashTb4b4b4, Te6edf3dest_nameTb4b4b4, Te6edf3roomTb4b4b4)Tb4b4b4:
Te6edf3error_text Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffdismissTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffconfirmedTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3hub Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8ffadd_hubTb4b4b4(Te6edf3hub_hashTb4b4b4, Te6edf3dest_nameTff7b72=Te6edf3dest_nameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3roomTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_select_roomTb4b4b4(Tff7b72NoneTb4b4b4, Tb4b4b4(Te6edf3hubTb4b4b4, Te6edf3roomTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_select_hubTb4b4b4(Tff7b72NoneTb4b4b4, Te6edf3hubTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3error_textTff7b72.Td2a8ffset_textTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6fferror_textTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCould not add hub: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3ChannelsDialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff A page is requesting to open an RRC hub.Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Address : Ta5d6ff"Tff7b72+Te6edf3hub_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Aspect : Ta5d6ff"Tff7b72+Tb4b4b4(Te6edf3dest_name Tff7b72or Ta5d6ff"Ta5d6ffrrc.hubTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Room : Ta5d6ff"Tff7b72+Tb4b4b4(Ta5d6ff"Ta5d6ff#Ta5d6ff"Tff7b72+Te6edf3room Tff7b72if Te6edf3room Tff7b72else Ta5d6ff"Ta5d6ff(none)Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(
Ta5d6ff"Ta5d6ff Opening will add this hub to your client,Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(
Ta5d6ff"Ta5d6ff and reveal your identity hash to the hubTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(
Ta5d6ff"Ta5d6ff to the hub operator.Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3error_textTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffOpenTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3confirmedTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffCancelTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3dismissTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffOpen RRC hub?Ta5d6ff"
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ff_show_dialog_overlayTb4b4b4(Te6edf3dialogTb4b4b4)
Tff7b72def Td2a8ffedit_hub_dialogTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3item Tff7b72= Tff7b72selfTff7b72.Td2a8ff_selected_rowTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3item Tff7b72is Tff7b72None Tff7b72or Tff7b72not Tffa657hasattrTb4b4b4(Te6edf3itemTb4b4b4, Ta5d6ff"Ta5d6ffhubTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3hub Tff7b72= Te6edf3itemTff7b72.Td2a8ffhub
Te6edf3e_name Tff7b72= Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4(Te6edf3captionTff7b72=Ta5d6ff"Ta5d6ffDisplay name : Ta5d6ff"Tb4b4b4, Te6edf3edit_textTff7b72=Te6edf3hubTff7b72.Td2a8ffname Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3cb_autorcn Tff7b72= Te6edf3urwidTff7b72.Td2a8ffCheckBoxTb4b4b4(Ta5d6ff"Ta5d6ffAuto-reconnect on disconnectTa5d6ff"Tb4b4b4, Te6edf3stateTff7b72=Te6edf3hubTff7b72.Td2a8ffauto_reconnectTb4b4b4)
Te6edf3cb_autolist Tff7b72= Te6edf3urwidTff7b72.Td2a8ffCheckBoxTb4b4b4(Ta5d6ff"Ta5d6ffAuto-fetch room list on connectTa5d6ff"Tb4b4b4, Te6edf3stateTff7b72=Te6edf3hubTff7b72.Td2a8ffauto_listTb4b4b4)
Te6edf3cb_autowho Tff7b72= Te6edf3urwidTff7b72.Td2a8ffCheckBoxTb4b4b4(Ta5d6ff"Ta5d6ffAuto-fetch members on room joinTa5d6ff"Tb4b4b4, Te6edf3stateTff7b72=Te6edf3hubTff7b72.Td2a8ffauto_whoTb4b4b4)
Te6edf3error_text Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffdismissTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffconfirmedTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3nm Tff7b72= Te6edf3e_nameTff7b72.Td2a8ffget_edit_textTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Te6edf3hubTff7b72.Td2a8ffname
Te6edf3hubTff7b72.Td2a8ffname Tff7b72= Te6edf3nm
Te6edf3hubTff7b72.Td2a8ffset_auto_reconnectTb4b4b4(Te6edf3cb_autorcnTff7b72.Td2a8ffget_stateTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3saveTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3hubTff7b72.Td2a8ffset_auto_listTb4b4b4(Te6edf3cb_autolistTff7b72.Td2a8ffget_stateTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3saveTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3hubTff7b72.Td2a8ffset_auto_whoTb4b4b4(Te6edf3cb_autowhoTff7b72.Td2a8ffget_stateTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3saveTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8ffsaveTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffselected_key Tff7b72and Tff7b72selfTff7b72.Td2a8ffselected_keyTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffhubTa5d6ff" Tff7b72and Tff7b72selfTff7b72.Td2a8ffselected_keyTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72== Te6edf3hubTff7b72.Td2a8ffhub_hashTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_show_hub_infoTb4b4b4(Te6edf3hubTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3error_textTff7b72.Td2a8ffset_textTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6fferror_textTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCould not save: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3ChannelsDialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Address : Ta5d6ff"Tff7b72+Te6edf3hubTff7b72.Td2a8ffhub_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Server : Ta5d6ff"Tff7b72+Tb4b4b4(Te6edf3hubTff7b72.Td2a8ffhub_name Tff7b72or Ta5d6ff"Ta5d6ff(unknown until connected)Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffglyphsTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,
Te6edf3e_nameTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3cb_autorcnTb4b4b4,
Te6edf3cb_autolistTb4b4b4,
Te6edf3cb_autowhoTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3error_textTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffSaveTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3confirmedTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffBackTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3dismissTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffEdit HubTa5d6ff"
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ff_show_dialog_overlayTb4b4b4(Te6edf3dialogTb4b4b4)
Tff7b72def Td2a8ffjoin_room_dialogTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3item Tff7b72= Tff7b72selfTff7b72.Td2a8ff_selected_rowTb4b4b4(Tb4b4b4)
Te6edf3hub Tff7b72= Tff7b72None
Tff7b72if Te6edf3item Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tffa657hasattrTb4b4b4(Te6edf3itemTb4b4b4, Ta5d6ff"Ta5d6ffhubTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3hub Tff7b72= Te6edf3itemTff7b72.Td2a8ffhub
Tff7b72if Te6edf3hub Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8ffhubsTb4b4b4:
Te6edf3hub Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8ffhubsTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72return
Te6edf3e_room Tff7b72= Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4(Te6edf3captionTff7b72=Ta5d6ff"Ta5d6ffRoom : #Ta5d6ff"Tb4b4b4, Te6edf3edit_textTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3e_key Tff7b72= Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4(Te6edf3captionTff7b72=Ta5d6ff"Ta5d6ffKey : Ta5d6ff"Tb4b4b4, Te6edf3edit_textTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3maskTff7b72=Ta5d6ff"Ta5d6ff*Ta5d6ff"Tb4b4b4)
Te6edf3error_text Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3key_section_placeholder Tff7b72= Te6edf3urwidTff7b72.Td2a8ffWidgetPlaceholderTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffupdate_key_visibilityTb4b4b4(Te6edf3checkboxTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3stateTb4b4b4:
Te6edf3key_section_placeholderTff7b72.Td2a8fforiginal_widget Tff7b72= Te6edf3e_key
Tff7b72elseTb4b4b4:
Te6edf3key_section_placeholderTff7b72.Td2a8fforiginal_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3cb_key Tff7b72= Te6edf3urwidTff7b72.Td2a8ffCheckBoxTb4b4b4(Ta5d6ff"Ta5d6ffKeyed room (+k)Ta5d6ff"Tb4b4b4, Te6edf3stateTff7b72=Tff7b72FalseTb4b4b4, Te6edf3on_state_changeTff7b72=Te6edf3update_key_visibilityTb4b4b4)
Tff7b72def Td2a8ffdismissTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffconfirmedTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3room Tff7b72= Te6edf3e_roomTff7b72.Td2a8ffget_edit_textTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3roomTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffRoom name is requiredTa5d6ff"Tb4b4b4)
Te6edf3key Tff7b72= Te6edf3e_keyTff7b72.Td2a8ffget_edit_textTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72if Te6edf3cb_keyTff7b72.Td2a8ffget_stateTb4b4b4(Tb4b4b4) Tff7b72else Tff7b72None
Te6edf3key Tff7b72= Te6edf3key Tff7b72or Tff7b72None
Te6edf3hubTff7b72.Td2a8ffadd_roomTb4b4b4(Te6edf3roomTb4b4b4)
Tff7b72if Te6edf3hubTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RRCHubTff7b72.Td2a8ffSTATUS_CONNECTEDTb4b4b4:
Te6edf3hubTff7b72.Td2a8ffjoin_roomTb4b4b4(Te6edf3roomTb4b4b4, Te6edf3keyTff7b72=Te6edf3keyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_select_roomTb4b4b4(Tff7b72NoneTb4b4b4, Tb4b4b4(Te6edf3hubTb4b4b4, Te6edf3roomTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3error_textTff7b72.Td2a8ffset_textTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6fferror_textTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCould not join: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3ChannelsDialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Hub : Ta5d6ff"Tff7b72+Te6edf3hubTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4,
Te6edf3e_roomTb4b4b4,
Te6edf3cb_keyTb4b4b4,
Te6edf3key_section_placeholderTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3error_textTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffJoinTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3confirmedTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffBackTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3dismissTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffAdd RoomTa5d6ff"
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ff_show_dialog_overlayTb4b4b4(Te6edf3dialogTb4b4b4)
Tff7b72def Td2a8ffshow_user_infoTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4, Te6edf3payloadTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3hubTb4b4b4, Te6edf3peer_hashTb4b4b4, Te6edf3display_name Tff7b72= Te6edf3payload
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3peer_hashTb4b4b4, Tb4b4b4(Tffa657bytesTb4b4b4, Tffa657bytearrayTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3peer_hash Tff7b72= Tffa657bytesTb4b4b4(Te6edf3peer_hashTb4b4b4)
Te6edf3identity_hex Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3peer_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3own_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffidentityTff7b72.Td2a8ffhash Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffidentity Tff7b72is Tff7b72not Tff7b72None Tff7b72else Tff7b72None
Te6edf3is_self Tff7b72= Tb4b4b4(Te6edf3own_hash Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3peer_hash Tff7b72== Te6edf3own_hashTb4b4b4)
Te6edf3lxmf_hex Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3peer_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3peer_hashTb4b4b4, Te6edf3from_identity_hashTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3peer_identity Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3lxmf_dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffhash_from_name_and_identityTb4b4b4(Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4, Te6edf3peer_identityTb4b4b4)
Te6edf3lxmf_hex Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3lxmf_destTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffon_closeTb4b4b4(Te6edf3_bTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffon_openTb4b4b4(Te6edf3_bTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3lxmf_hex Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Te6edf3_ChatLinkDelegateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hubTb4b4b4)Tff7b72.Td2a8ff_open_lxmfTb4b4b4(Te6edf3lxmf_hexTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not open conversation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3safe_name Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3display_nameTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftextuiTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffsanitize_namesTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3safe_name Tff7b72= Te6edf3sanitize_nameTb4b4b4(Tffa657strTb4b4b4(Te6edf3display_nameTb4b4b4)Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3safe_name Tff7b72= Te6edf3strip_modifiersTb4b4b4(Tffa657strTb4b4b4(Te6edf3display_nameTb4b4b4)Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3safe_name Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3lines Tff7b72= Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Nick : Ta5d6ff"Tff7b72+Te6edf3safe_nameTb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Identity : Ta5d6ff"Tff7b72+Te6edf3identity_hexTb4b4b4)Tb4b4b4,
Tb4b4b4]
Tff7b72if Te6edf3lxmf_hexTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff LXMF : Ta5d6ff"Tff7b72+Te6edf3lxmf_hexTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3is_selfTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff (This is you)Ta5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffCloseTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3on_closeTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3lxmf_hex Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Identity not in local cache;Ta5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff conversation canTa5d6ff'Ta5d6fft be opened untilTa5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff the peer announces.Ta5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffCloseTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3on_closeTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.55Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffOpen ConversationTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3on_openTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.05Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.40Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffCloseTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3on_closeTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3ChannelsDialogLineBoxTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Te6edf3linesTb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffUser InfoTa5d6ff"Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ff_show_dialog_overlayTb4b4b4(Te6edf3dialogTb4b4b4)
Tff7b72def Td2a8ff_show_dialog_overlayTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dialogTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdialog_open Tff7b72= Tff7b72True
Te6edf3overlay Tff7b72= Te6edf3urwidTff7b72.Td2a8ffOverlayTb4b4b4(
Te6edf3dialogTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffcolumns_widgetTb4b4b4,
Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4,
Te6edf3widthTff7b72=Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffRELATIVETb4b4b4, T79c0ff60Tb4b4b4)Tb4b4b4,
Te6edf3min_widthTff7b72=T79c0ff40Tb4b4b4,
Te6edf3valignTff7b72=Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4,
Te6edf3heightTff7b72=Te6edf3urwidTff7b72.Td2a8ffPACKTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidgetTff7b72.Td2a8fforiginal_widget Tff7b72= Te6edf3overlay
Tff7b72def Td2a8ffclose_dialogTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdialog_open Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffwidgetTff7b72.Td2a8fforiginal_widget Tff7b72= Tff7b72selfTff7b72.Td2a8ffcolumns_widget
Tff7b72def Td2a8ff_process_pendingTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4:
Tff7b72while Tff7b72TrueTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3action Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pending_actionsTff7b72.Td2a8ffpopleftTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149IndexErrorTb4b4b4:
Tff7b72break
Tff7b72tryTb4b4b4:
Te6edf3actionTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRRC UI action failed: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72def Td2a8ff_wakeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3actionTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_pending_actionsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3actionTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_wake_fd Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3osTff7b72.Td2a8ffwriteTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_wake_fdTb4b4b4, Ta5d6ffbTa5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffloopTff7b72.Td2a8ffset_alarm_inTb4b4b4(T79c0ff0.0Tb4b4b4, Tff7b72lambda Te6edf3lTb4b4b4, Te6edf3dTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_process_pendingTb4b4b4(Tff7b72NoneTb4b4b4)Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ff_on_rrc_changeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hubTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffactionTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_room_widget Tff7b72is Tff7b72not Tff7b72None
Tff7b72and Tff7b72selfTff7b72.Td2a8ffcurrent_room_widgetTff7b72.Td2a8ffhub Tff7b72is Te6edf3hubTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcurrent_room_widgetTff7b72.Td2a8ff_refresh_users_paneTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72elif Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffselected_key
Tff7b72and Tff7b72selfTff7b72.Td2a8ffselected_keyTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffhubTa5d6ff"
Tff7b72and Tff7b72selfTff7b72.Td2a8ffselected_keyTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72== Te6edf3hubTff7b72.Td2a8ffhub_hash
Tff7b72and Tff7b72selfTff7b72.Td2a8ffselected_keyTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72== Te6edf3hubTff7b72.Td2a8ffdest_nameTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_show_hub_infoTb4b4b4(Te6edf3hubTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ff_wakeTb4b4b4(Te6edf3actionTb4b4b4)
Tff7b72def Td2a8ff_on_rrc_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hubTb4b4b4, Te6edf3msgTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffactionTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3is_active Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_room_widget Tff7b72is Tff7b72not Tff7b72None
Tff7b72and Tff7b72selfTff7b72.Td2a8ffcurrent_room_widgetTff7b72.Td2a8ffhub Tff7b72is Te6edf3hub
Tff7b72and Tff7b72selfTff7b72.Td2a8ffcurrent_room_widgetTff7b72.Td2a8ffroom Tff7b72== Te6edf3msgTff7b72.Td2a8ffroomTb4b4b4)
Tff7b72if Tffa657getattrTb4b4b4(Te6edf3msgTb4b4b4, Ta5d6ff"Ta5d6ffmentionTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4) Tff7b72and Tff7b72not Te6edf3is_activeTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_ring_mention_bellTb4b4b4(Te6edf3hubTb4b4b4, Te6edf3msgTff7b72.Td2a8ffroomTb4b4b4)
Tff7b72if Te6edf3is_activeTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcurrent_room_widgetTff7b72.Td2a8ffappend_messageTb4b4b4(Te6edf3msgTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_wakeTb4b4b4(Te6edf3actionTb4b4b4)
Tff7b72def Td2a8ff_ring_mention_bellTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hubTb4b4b4, Te6edf3roomTb4b4b4)Tb4b4b4:
Te6edf3key Tff7b72= Tb4b4b4(Te6edf3hubTff7b72.Td2a8ffhub_hashTb4b4b4, Te6edf3room Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8ffmonotonicTb4b4b4(Tb4b4b4)
Te6edf3last Tff7b72= Tff7b72selfTff7b72.Td2a8ff_mention_bell_lastTff7b72.Td2a8ffgetTb4b4b4(Te6edf3keyTb4b4b4, T79c0ff0.0Tb4b4b4)
Tff7b72if Te6edf3now Tff7b72- Te6edf3last Tff7b72< T79c0ff5.0Tb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ff_mention_bell_lastTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72= Te6edf3now
Tff7b72tryTb4b4b4:
Tff7b72import T7ee787sys
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Tffea00\x07Ta5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────